日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python基础-2

發(fā)布時間:2024/8/26 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python基础-2 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.文件操作

  mode的常用種類r w a rb wb ab ,帶b標識不用指定編碼格式全都是byte類型 ,用于非文本文件(圖 音 視頻)  

  r模式下僅讀取

  w模式下當文件沒有可以創(chuàng)建 ,但是會覆蓋寫入

  a模式下可以追加

  readline() 讀取一行,不占用內(nèi)存   

  readlines() 將文件所有行讀取放入一個list中

# 文件讀取
f = open('json.txt',mode='r',encoding="utf-8") # 讀取文件編碼
print(f.readline())
print(f.readline()) # 從文件中讀取一行一行讀取
print(f.read()) # 將管道文件內(nèi)容一次讀取出來
f.seek(0) # 移動光標 ,0到最開始位置 1光標當前位置 2文件尾部
print(f.read())
f.flush() # 清空管道
f.close() # 關(guān)閉管道

# 文件復制寫入
with open('json.txt', mode='rb') as f1,open('copy.txt', mode='wb') as f2: # with可以幫助做管道優(yōu)化
for line in f1: # for循環(huán)按文件行循環(huán)
f2.write(line)

# 文件修改(所有的編輯器都是如此)
# 文件修改的步驟: 1.文件修改僅將源文件讀出 2.變更操作寫入新文件 3.源文件刪除 4.新文件重命名
import os
with open("test1.txt", mode="r", encoding="utf-8") as f1, \
open("test1.txt_副本", mode="w", encoding="utf-8") as f2:
# 代碼塊(with), 當這個代碼塊結(jié)束的時候. 自動的關(guān)閉f1和f2
for line in f1:
s = line.replace("centos", "redhat")
f2.write(s)
os.remove("test1.txt")
os.rename("test1.txt_副本", "test1.txt")

?

2.三種推導式

  推導式是可以從一個數(shù)據(jù)序列構(gòu)建另一個新的數(shù)據(jù)序列的結(jié)構(gòu)體(三種:list dict set推導式)

  list推導式? ? ? ? [表達式 for 循環(huán) if 條件]        #換成圓括號變生成器

#推導式
list1 = [x*x for x in range(1,10)]
#普通 list1
=[] for x in range(1,10):list1.append(x*x)

  dict推導式? ? ?? {key:value for循環(huán) if判斷}       

# 推導式
dict1 = {x:x**x for x in range(0, 10) if x < 9}

# 普通
dict3={}
for k in range(0,10):
if k < 9:
dict3[k]=k**k # key values 互換
dict1 = {1: 'n1', 2: 'n2'}
dict2 = {v: k+1 for k, v in dict1.items()}

  set推導式  {表達式 for 循環(huán) if 條件}     # 與列表推導式的擴號不同   ?

set1 = {x**x:2 for x in range(0, 10) if x < 9}

?

3.閉包

   閉包在python中 ,可以簡單理解為 ,內(nèi)函數(shù)綁定外函數(shù)的局部變量 ,外函數(shù)返回內(nèi)函數(shù)內(nèi)存地址 

# 匿名函數(shù)的閉包寫法
fun = [lambda x: x*i for i in range(4)]          # 典型閉包 ,外函數(shù)的i最后會是3,內(nèi)函數(shù)lambda從外函數(shù)沒有定義i的值 ,最后生成列表都是函數(shù)

? for item in fun:

? print(item(1))


# def函數(shù)的閉包寫法
def func():
# 定義一個空列表
fun_lambda_list = []
# 循環(huán)
for i in range(4):
# 定義一個內(nèi)函數(shù),沒被調(diào)用也不會去拿i的值 ,所以返回值一直都是x*i
def lambda_(x):
# 返回x*i
return x * i
# 將內(nèi)函數(shù)追加到列表中
fun_lambda_list.append(lambda_)
return fun_lambda_list                #列表中有四個函數(shù)(一個都沒有執(zhí)行[x*i,x*i,x*i,x*i]) ,當fun被調(diào)用的那一刻開始i被定格為3



# 將內(nèi)函數(shù)中加入每次i的值就可以了,這樣獲得的函數(shù)列表就是[x*0,x*1,x*2,x*3] fun = [lambda x,i=i:x*i for i in range(4)]

?

4.模塊-包

  內(nèi)置標準模塊

    random模塊

import random

print(random.random()) # 隨機0-1的浮點
print(random.uniform(1, 3)) # 隨機1-3的浮點
print(random.randint(1, 10)) # 隨機取1-10的整數(shù)

print(random.randrange(1, 9, 2)) # 隨機取1-9之間的數(shù)步長為2,不顧尾
print(random.choice([1, 2, 3, [2, 3]])) # 隨機選擇可迭代對象元素
print(random.sample([1, 2, 3, 4, 'hh'], 3)) # 列表任意X個元素組成新列表,這里X是3

    time模塊  

import time

print(time.localtime()) #打印當前日期
print(time.time()) #打印時間戳 19701.1. 00:00:00的偏移量
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())) #格式化當前日期(format ,日期)

    re模塊

      正則

# .    匹配任意單個字符
# ^    匹配字符串起始部分
# $    匹配字符串終止位置
# *    匹配前一個字符0或多次
# +   匹配前一個字符1次或多次
# ?    匹配前一個字符1次或0次
# {N}   匹配前一個字符N次 
# {N,}  匹配前一個字符N次 
# {M,N}  匹配前一個字符N,M次
# [...]  匹配任意字符集中單個字符
# [x-y]  匹配范圍內(nèi)任意單個字符
# [^..]  匹配出去字符集中任意單個字符 
# \d   匹配任意一個10機制數(shù)字
# \w    匹配任意字母數(shù)字
# \s    匹配任何空字符
# \b    匹配字符邊界
# ()   分組 ,
# \N    匹配保存的分組
# \     轉(zhuǎn)義符

1.
2.
3.
4.
5.

      re常用方法

        re.match('正則表達式', 要匹配的字符串)            #如果匹配成功返回一個對象 ,否則返回None?

    os模塊

import os

os.path.abspath('..')                  # 獲取父目錄絕對路徑

os.path.abspath('.')                    # 獲取當前絕對路徑 os.path.abspath(__file__)                  #獲取當前文件的路徑和文件名 dir1 = 'C:\\boruoboluomi\\a1\\b1\\a.txt'

os.path.dirname(os.path.dirname(os.path.abspath(dir1))) #dirname可以將路徑 一層一層脫掉

os.path.split(dir1)                      # 切割路徑 ,將路徑與文件分離

os.path.join('C:\\boruoboluomi\\a1\\b1', 'a.txt')      # 拼接路徑 , 將路徑與文件拼接

os.path.exists(dir1)                   # 判斷該文件是否存在

os.remove('絕對路徑文件')                 # 刪除文件

os.system('ls /etc/profile')            # 執(zhí)行shell命令 os.getcwd()                      # 獲取pwd當前絕對路徑

    sys模塊

import sys

print(sys.modules)       #查看解釋器運行時自動加載的所有模塊 print(sys.path)            #查看第三方模塊的路徑 ,該路徑下的模塊都可以使用import導入使用,也可以使用sys.path.append()追加路徑

    math模塊

import math

t1 = 6.6

print(math.ceil(t1))           # 向上取整

print(math.floor(t1))         # 向下取整

print(math.pow(t1, 2))         # t1的2次方

print(math.fabs(t1))            # t1的絕對值

    json模塊    

      序列化模塊 ,json可以將python數(shù)據(jù)類型序列化為可傳輸?shù)淖址?,對方接受到后通過反序列化可獲得自己可讀語言數(shù)據(jù)類型

import json  #用于網(wǎng)絡(luò)傳輸?shù)膁umps ,loadsdic = {'name':'小咪','age':12,'sex':'公'} #定義一個字典dicret = json.dumps(dic)          #序列化過程:將dic變成json格式的ret(特殊字符串)ret1 = json.loads(ret)         #反序列化過程:將ret這個json格式反解成為ret1(還原為字典)print(ret,type(ret))print(ret1,type(ret1)) #用于文件存儲數(shù)據(jù)的dump ,load list1 = [1, 2, 3, 4] f1 = open('json.txt', mode='w')     # 打開一個文件,文件僅支持字符串寫入 json.dump(list1, f1)           # dump方法可以將py數(shù)據(jù)類型和文件句柄當做參數(shù)傳入,做序列化 f1.close() f1 = open('json.txt', mode='r') ret = json.load(f1)           # dump方法將文件中內(nèi)容反序列化取出 print(ret, type(ret))         # 反序列化后數(shù)據(jù)類型和序列化之前一模一樣

    rsa模塊 & base64模塊

      1.生成一組非對稱秘鑰對 ,該秘鑰對最大加密數(shù)據(jù)長度是128字節(jié) ,其中11個自己加密使用 ,被加密數(shù)據(jù)僅有117

      2.base64編碼的原因是因為網(wǎng)絡(luò)傳輸錯誤會降低

      3.定義加密函數(shù) ,將數(shù)據(jù)以117步長切割加密 ,放入列表 ,發(fā)送到對端

      4.定義解密函數(shù) ,將數(shù)據(jù)以128步長解密拼接 ,即可獲得原數(shù)據(jù)

      5.調(diào)用rsa加密必須是byte的數(shù)據(jù)

import rsa import base64####生成一組秘鑰對#### pub_key_obj, priv_key_obj = rsa.newkeys(1024) # 最大加密value的字節(jié)數(shù)是 1024/8 - 11(自己用) = 117(可用加密字節(jié))# 將對象轉(zhuǎn)換為字符串類型 pub_key_str = pub_key_obj.save_pkcs1() priv_key_str = priv_key_obj.save_pkcs1()# 再通過base64編碼 pub_key_code = base64.standard_b64encode(pub_key_str) priv_key_code = base64.standard_b64encode(priv_key_str) print(pub_key_code) print(priv_key_code) ####數(shù)據(jù)加密#### def encrypt(bytes_value): values_list = [] key_str = base64.standard_b64decode(pub_key_code) pk = rsa.PublicKey.load_pkcs1(key_str) length = len(bytes_value) for i in range(0, length, 117): val = rsa.encrypt(bytes_value[i: i + 117], pk) values_list.append(val) val = b''.join(values_list) return val ####數(shù)據(jù)解密#### def decrypt(value): values_list = [] key_str = base64.standard_b64decode(priv_key_code) pk = rsa.PrivateKey.load_pkcs1(key_str) length = len(value) for i in range(0, length, 128): val = rsa.decrypt(value[i: i + 128], pk) values_list.append(val) val = b''.join(values_list) # val = rsa.decrypt(value, pk) return val ###調(diào)用 string = 'alex' * 100 ret = encrypt(string.encode('utf-8')) # 加密數(shù)據(jù)要求byte類型 print(ret) print(decrypt(ret).decode('utf-8')) # 數(shù)據(jù)encode編碼->加密 ->解密->decode解碼

  自定義模塊

    自定義日志模塊

      1.__init__方法定義logger對象 ,定義info ,error方法 ,實例化Logger類獲得單例模式的對象?

      2.使用直接from? 文件 import logger 加載對象

      3.調(diào)用 logger.info(日志即可)

import logging from conf import settingsclass Logger:def __init__(self, file_name, log_name, level=logging.INFO):# 定義使用文件介質(zhì)存儲(FileHandler) ,該文件名和編碼格式file_handler = logging.FileHandler(file_name, encoding='utf-8')# 定義格式(Formatter)fmt = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s") # 為文件介質(zhì)定義格式(setFormatter) file_handler.setFormatter(fmt) # 定義logger對象,給實例化的對象 ,定義日志對象名與最低顯示等級 self.logger = logging.Logger(log_name, level=level) self.logger.addHandler(file_handler) def info(self, msg): return self.logger.info(msg) def error(self, msg): return self.logger.error(msg) logger = Logger(settings.LOGGER_PATH, settings.LOGGER_NAME)

  包

    包就是有__init__.py文件標識的文件夾

  精準導入方式

    from lib.disk. import Pack1Class          #推薦使用

    import Root.Pack1.Pack1Class

?

轉(zhuǎn)載于:https://www.cnblogs.com/quguanwen/p/11158033.html

總結(jié)

以上是生活随笔為你收集整理的python基础-2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。