python 17 內置模塊


1. 序列化模塊

1.1 json 模塊

  1. 不同語言都遵循的一種數據轉化格式,即不同語言都使用的特殊字符串。
  2. json序列化只支持部分Python數據結構:dict,list,tuple,str,int, float,True,False,None
json模塊是將滿足條件的數據結構轉化成特殊的字符串,並且也可以反序列化還原回去

​ 用於網絡傳輸:dumps、loads
​ 用於文件寫讀:dump、load

1.1.1 dumps、loads

import json
lst = [1,2,3,4,5,6]
str_lst = json.dumps(lst)
print(str_lst,type(str_lst))  # 將列表轉換成字符串
	# [1, 2, 3, 4, 5, 6] <class 'str'>

list_lst = json.loads(str_lst)
print(list_lst,type(list_lst)) # 將字符串轉換成列表
	# [1, 2, 3, 4, 5, 6] <class 'list'>

# 總結:
dumps:將對象轉換(序列化)成字符串
loads:將字符串轉換(反序列化)成對象

1.1.2 dump、loads

import json
lst = [1,2,3,4,5]
f = open("info","a",encoding="utf-8")
json.dump(lst,f)  # 將列表寫入文件中
f.close()

f = open("info","r",encoding="utf-8")
f1 = json.load(f)
print(f1, type(f1))   # 將文件中的字符串轉換成列表

# 總結:
json.dump(對象,文件句柄):將對象轉換(序列化)成字符串寫入文件;
json.load(文件句柄):將文件的字符串讀取轉換(反序列化)成對象。

1.1.3 同時寫/讀多個內容

# 寫
lst = [1,2,3,4,5]
f = open("info","a+",encoding="utf-8")
f.write(json.dumps(lst)+"\n")
f.write(json.dumps(lst)+"\n")
f.write(json.dumps(lst)+"\n")
f.close()

# 讀
f1 = open("info","r",encoding="utf-8")
for i in f1:
    s = json.loads(i)  
    print(s,type(s)) 
	# [1, 2, 3, 4, 5] <class 'list'>

1.2 pickle 模塊

pickle:序列化,將python所有對象進行轉換,是python自帶的,不能用於其他語言。

1.2.1 dumps、loads

import pickle
lst = [1,2,3,4,5]
t_lst = pickle.dumps(lst)  # 將列表轉換成類字節
print(t_lst) #b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x05e.'

li = pickle.loads(t_lst)  #將類字節轉換成列表
print(li,type(li))	
# [1, 2, 3, 4, 5] <class 'list'>

# 總結:
dumps:將對象轉換成類字節;
loads:將類字節轉換成對象。

1.2.2 dump、load

import pickle
dic = {"name":"alex"}
pickle.dump(dic,open("info","wb"))  # 字典轉換成類字節寫入文件
print(pickle.load(open("info","rb"))) # 從文件讀取並轉換成字典

# 總結
pickle.dump(對象,文件句柄):將對象轉換(序列化)成類字節寫入文件;
pickle.load(文件句柄):將文件的類字節讀取轉換(反序列化)成對象

1.2.3 同時寫/讀多個內容

import pickle
dic = {"a":1,"b"=2}
f = open("info","wb")
s = "\n".encode("utf-8")
f.write(pickle.dumps(dic)+ s)
f.write(pickle.dumps(dic)+ s)
f.write(pickle.dumps(dic)+ s)
f.close()

# 從文件讀
f1 = open("info","rb")
for i in f1:
    print(pickle.loads(i))

2. os 模塊

程序員通過python向操作系統發送指令(與操作系統交互的接口)。
# 1.工作目錄:
os.getcwd() # 當前文件的工作目錄路徑  ***
os.chdir("F:\s24\day06") # 工作目錄路徑切換
print(os.curdir)  # 當前級
print(os.pardir)  # 父級
# 2.文件夾 ***
os.mkdir("文件夾名") # 創建一個文件夾
os.rmdir("文件夾名") # 刪除一個文件夾
os.makedirs("ttt/sss/ddd/ee")  # 遞歸創建文件夾 
os.removedirs("ttt/sss/ddd/ee")  # 遞歸刪除文件夾
os.listdir(r"F:\s24\day17") # 將路徑下所有文件名按列表打印
# 3.文件
os.rename()  # 修改名字
os.remove("文件名")  # 刪除文件
# 4.路徑 os.path 
***
os.path.abspath(r"01 今日內容.py") # 通過相對路徑獲取絕對路徑
os.path.split(r"F:\s24\day17\01 今日內容.py") # 將路徑以最后一個\切割(路徑,文件名)
os.path.dirname(r"F:\s24\day17\01 今日內容.py") #只獲取路徑(沒有后面的文件名)
os.path.basename(r"F:\s24\day17\01 今日內容.py") #只獲取文件名
os.path.exists("路徑")  # 判斷這個路徑是否存在
os.path.isdir(r"F:\s24\day17")   # 判斷是不是工作目錄(路徑)(不能有文件名)
os.path.isfile(r"01 今日內容.py")  # 判斷是不是文件
os.path.isabs(r"F:\s24\day17\01 今日內容.py")   # 判斷是不是絕對路徑
os.path.join("D:\\","ttt","bbb") # 路徑拼接 *****
os.path.getatime(r"F:\s24\day17\04 序列化.py")  # 查看文件最后的修改時間
os.path.getsize(r"F:\s24\day09")     # 獲取當前文件/文件夾的大小

**
os.path.getctime(r"F:\s24\day17\04 序列化.py")     # 查看文件最后的訪問時間
os.path.getmtime(r"F:\s24\day17\04 序列化.py")     # 查看文件最后的訪問時間

3. sys 模塊

與python解釋器交互的接口。
***
sys.argv   # 當前文件運行  ['D:/S24/Day 17/1.py']
	# 命令行參數List,第一個元素是程序本身路徑;當做腳本執行的時候能夠攜帶參數
sys.path   #返回模塊的搜索路徑(列表),初始化時使用pythonpath環境變量的值

**
sys.exit(n)   # 退出程序,正常退出時exit(0),錯誤退出sys.exit(1),可修改
sys.version   # 獲取解釋器版本
sys.platform  # 返回操作系統平台名稱

4. hashlib 加密、摘要

4.1 加密

作用:加密和校驗

四種:md5 、 sha1 、 sha256 、 sha512
1.只要明文相同,密文就是相同的;
2.只要明文不相同,密文就是不相同的;
3.不能反逆(不能解密)--md5被中國人破解
# 加密:1.加密的內容;2.將要加密的內容轉換成字節

# md5加密:
import hashlib
md5 = hashlib.md5()   # 初始MD5
md5.update("加密內容",encode("編碼集"))   #放內容,編碼集可隨意
print(md5.hexdigest())		# 合成 輸出

# 其他方法,字節較長,算法越高,轉化成的結果越復雜,安全程度越高,相應的效率就會越低。

# 最常用的是md5,平時加密的時候sha1

4.2 加鹽

4.2.1 固定加鹽

import hashlib
md5 = hashlib.md5('學習'.encode('utf-8'))  # 學習就是固定的鹽
md5.update('a'.encode('utf-8'))
print(md5.hexdigest())

4.2.3 動態加鹽

user = input("請輸入賬號:")
pwd = input("請輸入密碼:")
import hashlib
md5 = hashlib.md5(user.encode('utf-8'))  # user每次都變
md5.update(pwd.encode('utf-8'))
print(md5.hexdigest())

4.3 文件一致性校驗

   '''下載一個軟件時,往往都帶有一個MD5或者shax值,當下載完成這個應用程序時你要是對比大小根本看不出什么問題,應該對比它們的md5值,如果兩個md5值相同,就證明這個應用程序是安全的,如果你下載的這個文件的MD5值與服務端給你提供的不同,那么就證明你這個應用程序肯定是植入病毒了(文件損壞的幾率很低),那么應該趕緊刪除。'''

# python-3.6.6-amd64.exe 文件檢驗
f = open(r"F:\s24\day17\python-3.6.6-amd64.exe","rb")
import hashlib
md5 = hashlib.md5()
while True:
    msg = f.read(1024)
    if msg:
        md5.update(msg)
    else:
        print(md5.hexdigest())
        break
# 767db14ed07b245e24e10785f9d28e29   結果一樣說明ok的

5. collections 模塊

5.1 Counte 統計(***)

from collections import Counter
s = [1,1,2,2,3,3]  
print(dict(Counter(s)))  # {1: 2, 2: 2, 3: 2}

s1 = ("a",2,3,3,"a",2,"a",1,"a")
print(dict(Counter(s1))) # {'a': 4, 2: 2, 3: 2, 1: 1}
# 統計元素出現的次數,以字典的形式輸出

5.2 namedtuple 命名元組

# 生成可以使用名字來訪問元素內容的tuple
namedtuple('名稱', [屬性list])

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p)   		# Point(x=1, y=2)

5.3 deque 雙端隊列

# 雙端隊列,可以快速的從另外一側追加和推出對象

lst = deque([1,2,3,4,5,6,7])
lst.append(8)   # 末尾增加
lst.appendleft(0) # 首加
lst.pop()		# 末尾刪除
lst.popleft()	# 首刪

5.4 defaultdict 帶有默認值的字典

 # 帶有默認值的字典
from collections import defaultdict
dic = defaultdict(list)    	# 定義字典值數據類型list
dic["key1"].append(12)		# 將值添加到列表中,鍵為key1
print(dic)   # {'key1': [12]}

# 將所有大於 66 的值保存至字典的第一個key中,將小於 66 的值保存至第二個key的值中。
from collections import defaultdict
values = [11, 22, 33,44,55,66,77,88,99,90]
my_dict = defaultdict(list)

for value in  values:
    if value>66:
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)

5.5 OrderedDict 有序字典

from collections import OrderedDict
od = OrderedDict([])
od["z"] = 1  
od["y"] = 2
od["x"] = 3
print(od)    # OrderedDict([('z', 1), ('y', 2), ('x', 3)]) 會按照插入的順序排列


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM