1. 程式人生 > >python數據序列化---json & pickle

python數據序列化---json & pickle

flush mps 字典 inf 文本文 數據序列化 UNC PE 通過

json & pickle數據序列化 序列化: 就是列表,字典等數據類型轉乘字符串存入文本文件
反序列: 就是字符串從文本讀出來後通過一種方法轉化為列表,字典等數據類型。例如eval() json通用的:只能處理一些簡單的數據類型:
json:
序列化和反序列化函數:
案例1:
import json
info = {
"name": "brace",
"age": 22,
}
json_str = json.dumps(info) #序列化為字符類型
print(type(json_str), json_str)
data = json.loads(json_str) #反序列化為字典類型
print(type(data), data)
輸出:
<class ‘str‘> {"name": "brace", "age": 22}
<class ‘dict‘> {‘name‘: ‘brace‘, ‘age‘: 22}

案例2:
import json
info = {
"name": "brace",
"age": 22,
}

with open("data", "w") as fs1:
json.dump(info, fs1) #可以直接序列化後執行文件存儲;

with open("data", "r") as fs2:
data = json.load(fs2) #可以直接執行文件讀取後反序列化;
print(type(data), data) 輸出:
<class ‘dict‘> {‘name‘: ‘brace‘, ‘age‘: 22}


案列3:
import json
a = {5:1,9:2,1:3,8:4,3:9}
with open("data.txt","w") as fs1:
fs1.write(json.dumps(a)) #序列化存儲
fs1.flush()

with open("data.txt","r") as fs2:
data = json.loads(fs2.read()) #讀取後反序列化
print(data)

{‘5‘: 1, ‘9‘: 2, ‘1‘: 3, ‘8‘: 4, ‘3‘: 9}


pickle:只能在python中使用:
可以執行一些稍復雜的序列化和反序列化

案例 1:
import pickle
def sayHi(name):
print("hello %s" %name)

info = {
"name": "brace",
"age": 22,
"func": sayHi
}

with open("data.txt","wb") as fs1:
fs1.write(pickle.dumps(info)) #pickle.dumps() 轉化的時二進制類型。所以必須用wb來存儲
fs1.flush()

with open("data.txt","rb") as fs2: #pickle.loads() 讀取2進制數據後進行反序列化
data = pickle.loads(fs2.read())
print(data)

輸出:
{‘name‘: ‘brace‘, ‘age‘: 22, ‘func‘: <function sayHi at 0x02F6BA08>}


案例2:
pickle的dump和load的方法:和上面的功能時一樣的,但可以直接文件操作


import pickle
def sayHi(name):
print("hello %s" %name)

info = {
"name": "brace",
"age": 22,
"func": sayHi
}

with open("data.txt","wb") as fs1:
pickle.dump(info, fs1) #可以直接序列化後執行文件存儲;

with open("data.txt","rb") as fs2:
data=pickle.load(fs2) #可以直接執行文件讀取後反序列化;
print(data)

輸出:
{‘name‘: ‘brace‘, ‘age‘: 22, ‘func‘: <function sayHi at 0x02F6BA08>}

python數據序列化---json & pickle