20180209-json&pickle模塊
阿新 • • 發佈:2018-02-09
port 裏的 python ict 什麽 data 傳輸 序列化 bytes
什麽是序列化?
序列化就是把內存裏的數據類型轉成字符串,以使其能夠存儲到硬盤中或在網絡中傳輸到遠程,因為硬盤和網絡傳輸時只接收bytes
用於序列化的兩個模塊
1. json,用於字符串和python數據類型間的轉換
2. pickle,用於python特有的數據類型和python數據類型間進行轉換
json模塊提供了4個功能:dumps、dump、loads、load 可以跨平臺
pickle模塊提供了4個功能:dumps、dump、loads、load 只能在python中使用
json用法
import json data = { ‘role‘: ‘Alex‘, ‘life‘: 50 } # json序列化 json_str = json.dumps(data) print(json_str,type(json_str)) # 輸出 # {"role": "Alex", "life": 50} <class ‘str‘> # json反序列化 data = json.loads(json_str) print(data,type(data)) # 輸出 # {‘role‘: ‘Alex‘, ‘life‘: 50} <class ‘dict‘>
配合文件操作的json用法
# 序列化配合文件操作 with open(‘./tmp/json.pk‘,‘w‘) as fp: json.dump(data,fp) # 反序列化配合文件操作 with open(‘tmp/json.pk‘) as fp: data = json.load(fp) print(data,type(data)) # 輸出 # {‘life‘: 50, ‘role‘: ‘Alex‘} <class ‘dict‘>
pickle用法
import pickle # pickle序列化 pickle_str = pickle.dumps(data) print(pickle_str,type(pickle_str))# 輸出 # b‘\x80\x03}q\x00(X\x04\x00\x00\x00lifeq\x01K2X\x04\x00\x00\x00roleq\x02X\x04\x00\x00\x00Alexq\x03u.‘ <class ‘bytes‘> # pickle反序列化 data = pickle.loads(pickle_str) print(data,type(data)) # 輸出 # {‘life‘: 50, ‘role‘: ‘Alex‘} <class ‘dict‘>
結合文件操作
# 結合文件操作的pickle序列化 with open(‘tmp/pickle.pk‘,‘wb‘) as fp: pickle.dump(data,fp) # 結合文件操作的pickle反序列化 with open(‘tmp/pickle.pk‘,‘rb‘) as fp: data = pickle.load(fp) print(data,type(data))
註意:pickle序列化後不是字符串,而是字節,所以在文件操作的時候,需要註意要使用 ‘wb‘ 和 ‘rb‘
20180209-json&pickle模塊