1. 程式人生 > >Python基礎(九) 常用模組彙總

Python基礎(九) 常用模組彙總

3.8 json模組重點

json模組是將滿足條件的資料結構轉化成特殊的字串,並且也可以反序列化還原回去。

  • 不同語言都遵循的一種資料轉化格式,即不同語言都使用的特殊字串。(比如Python的一個列表[1, 2, 3]利用json轉化成特殊的字串,然後在編碼成bytes傳送給php的開發者,php的開發者就可以解碼成特殊的字串,然後在反解成原陣列(列表): [1, 2, 3])
  • json序列化只支援部分Python資料結構:dict,list, tuple,str,int, float,True,False,None

用於網路傳輸,和檔案寫讀:dumps(轉化成str)loads(轉回去)

網路傳輸

import json                     #匯入json模組
dic={1:'李文浩',2:'聶冰',3:'趙秋雨'}
new_dic=json.dumps(dic,ensure_ascii=False)          #將dict格式轉化成str格式
print(new_dic,type(new_dic)#{"1": "李文浩", "2": "聶冰", "3": "趙秋雨"} <class 'str'>
old_b=old_dic.encode('utf-8')       #將str模式的字典轉化成byts型別編碼
    #模擬網路傳輸
    new_b=old_b.decode('utf-8')     #解碼
new_dic=json.loads(new_b)           #轉化成字典型別
print(new_dic,type(new_dic))

檔案寫入

  • 單行寫入
import json
dic={1:'李文浩',2:'聶冰',3:'趙秋雨'}
with open('json測試.json',mode='w',encoding='utf-8')as f1:
    old_dic=json.dumps(dic,ensure_ascii=False)
    f1.write(old_dic)
with open('json測試.json',encoding='utf-8')as f2:
    print(json.loads(f2.read()))
  • 多行寫入
dic1 = {'name':'oldboy1'}
dic2 = {'name':'oldboy2'}
dic3 = {'name':'oldboy3'}
f = open('序列化',encoding='utf-8',mode='a')
str1 = json.dumps(dic1)
f.write(str1+'\n')
str2 = json.dumps(dic2)
f.write(str2+'\n')
str3 = json.dumps(dic3)
f.write(str3+'\n')
f.close()
​
f = open('序列化',encoding='utf-8')
for line in f:
    print(json.loads(line))

用於單個數據檔案寫讀:dump、load

import json
f = open('json_file.json','w')
dic = {'k1':'v1','k2':'v2','k3':'v3'}
json.dump(dic,f)  #dump方法接收一個檔案控制代碼,直接將字典轉換成json字串寫入檔案
f.close()
# json檔案也是檔案,就是專門儲存json字串的檔案。
f = open('json_file.json')
dic2 = json.load(f)  #load方法接收一個檔案控制代碼,直接將檔案中的json字串轉換成資料結構返回
f.close()
print(type(dic2),dic2)

3.9pickle模組

​ 用於網路傳輸:dumps、loads

import pickle
dic={1:'李文浩',2:'聶冰',3:'趙秋雨'}
str_dic=pickle.dumps(dic)
print(str_dic)          #bytes型別
dic2=pickle.loads(str_dic)
print(dic2)             #dict型別 

​ 用於檔案寫讀:dump、load

dic = {(1,2):'oldboy',1:True,'set':{1,2,3}}
f = open('pick序列化',mode='wb')
pickle.dump(dic,f)
f.close()
with open('pick序列化',mode='wb') as f1:
    pickle.dump(dic,f1)

3.9 os模組

os.getcwd()     # 獲取當前工作目錄,即當前python指令碼工作的目錄路徑
os.chdir("dirname")  改變當前指令碼工作目錄;相當於shell下cd  **
os.curdir  返回當前目錄: ('.')  **
os.pardir  獲取當前目錄的父目錄字串名:('..') **

和資料夾相關

os.makedirs('dirname1/dirname2')    #遞迴生成目錄  ***
os.removedirs('dirname1')           #遞迴刪除目錄(目錄裡沒有檔案(為空)才可以刪除)
os.mkdir('絕對路徑/相對路徑')          #建立一個資料夾 ***
os.rmdir('絕對路徑/相對路徑')          #刪除資料夾***
os.listdir('dirname')               $列出指定目錄下的所有檔案和子目錄,包括隱藏檔案,並以列表列印

和檔案相關

os.remove()  $刪除一個檔案  ***
os.rename("oldname","newname")  $重新命名檔案/目錄  ***
os.stat('path/filename')  獲取檔案/目錄資訊 **

path系列,和路徑相關

os.path.abspath(path) $返回path規範化的絕對路徑  ***
os.path.split(path)   #將path分割成目錄和檔名二元組返回 ***
os.path.dirname('E:\Python專案')# E:\        獲取父級目錄
os.path.dirname(os.path.dirname(__file__))#獲取父級目錄的父級目錄 :獲取爺爺級目錄
os.path.basename('E:\Python專案')#Python專案  返回檔名
os.path.exists(path)  #檢視資料夾或檔案是否存在存在,返回True;如果path不存在,返回False
os.path.isabs(path)   #如果path是絕對路徑,返回True  **
os.path.isfile(path)  #如果path是一個存在的檔案,返回True。否則返回False  ***
os.path.isdir(path)   #如果path是一個存在的目錄,則返回True。否則返回False  ***
os.path.join('D:','s23','day20','隨便')#路徑拼接,第一個絕對路徑之前的引數將被忽略 ***
os.path.getatime(path)  #返回path所指向的檔案或者目錄的最後訪問時間  **
os.path.getmtime(path)  #返回path所指向的檔案或者目錄的最後修改時間  **
os.path.getsize(path)   #返回path的大小 ***
print(__file__)         $動態獲取檔案的絕對路徑

4.0sys模組

sys.argv           命令列引數List,第一個元素是程式本身路徑
sys.exit(n)        退出程式,正常退出時exit(0),錯誤退出sys.exit(1)
sys.version        獲取Python解釋程式的版本資訊
sys.path           返回模組的搜尋路徑,初始化時使用PYTHONPATH環境變數的值  ***
sys.platform       返回作業系統平臺名稱

4.1 hashlib模組

普通加密

import hashlib
md5 = hashlib.md5()
md5.update('要加密的字串'.encode('utf-8'))
print(md5.hexdigest())

加鹽加密

  • 固定的鹽
import hashlib
md5=hashlib.md5('鹽'.encode('utf-8'))
md5.update('要加密的字串'.encode('utf-8'))
print(md5.hexdigest())
  • 動態的鹽
username = '太白金星666'
ret = hashlib.md5(username[::2].encode('utf-8'))  # 針對於每個賬戶,每個賬戶的鹽都不一樣
ret.update('a'.encode('utf-8'))
print(ret.hexdigest())

檔案的一致性校驗

def md5_file(path):
    ret = hashlib.md5()
    with open(path,mode='rb') as f1:
        while 1:
            content = f1.read(1024)
            if content:
                ret.update(content)
            else:
                return ret.hexdigest()
print(md5_file(r'E:\Python專案\python-3.7.4rc1-embed-win32.zip'))

4.2time 模組

#匯入時間模組
>>>import time

#時間戳
>>>time.time()
1500875844.800804

#時間字串
>>>time.strftime("%Y-%m-%d %X")
'2017-07-24 13:54:37'
>>>time.strftime("%Y-%m-%d %H-%M-%S")
'2017-07-24 13-55-04'

#時間元組:localtime將一個時間戳轉換為當前時區的struct_time
time.localtime()
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24,
          tm_hour=13, tm_min=59, tm_sec=37, 
                 tm_wday=0, tm_yday=205, tm_isdst=0)

4.3random模組

>>> import random
#隨機小數
>>> random.random()      # 大於0且小於1之間的小數
0.7664338663654585
>>> random.uniform(1,3) #大於1小於3的小數
1.6270147180533838
#恆富:發紅包

#隨機整數
>>> random.randint(1,5)  # 大於等於1且小於等於5之間的整數
>>> random.randrange(1,10,2) # 大於等於1且小於10之間的奇數


#隨機選擇一個返回
>>> random.choice([1,'23',[4,5]])  # #1或者23或者[4,5]
#隨機選擇多個返回,返回的個數為函式的第二個引數
>>> random.sample([1,'23',[4,5]],2) # #列表元素任意2個組合
[[4, 5], '23']


#打亂列表順序
>>> item=[1,3,5,7,9]
>>> random.shuffle(item) # 打亂次序
>>> item
[5, 1, 3, 7, 9]
>>> random.shuffle(item)
>>> item
[5, 9, 7, 1, 3]