Python 序列化協(xié)議是一種將 Python 對象轉(zhuǎn)換為可存儲(chǔ)或傳輸?shù)母袷降膮f(xié)議。它是在 Python 標(biāo)準(zhǔn)庫中提供的模塊 pickle 和 cPickle 中實(shí)現(xiàn)的。
pickle 模塊
在 Python 2.x 中,pickle 模塊支持普通 Python 類型,包括字符串、整數(shù)、列表、元組、字典等等。它還支持自定義的 Python 對象。
使用 pickle 模塊來序列化 Python 對象很簡單。我們只需要將對象傳遞給 pickle.dump() 方法即可。例如:
import pickle data = {'name': 'Alice', 'age': 25} # 將 data 對象序列化到文件中 with open('data.pickle', 'wb') as f: pickle.dump(data, f)
在上面的代碼中,我們將 data 對象序列化并將其保存到文件 data.pickle 中。要從文件中讀取數(shù)據(jù)并反序列化對象,可以使用 pickle.load() 方法。例如:
# 從文件中讀取序列化的對象并反序列化 with open('data.pickle', 'rb') as f: data = pickle.load(f) print(data) # {'name': 'Alice', 'age': 25}
cPickle 模塊
cPickle 模塊是 pickle 模塊的 C 實(shí)現(xiàn)版本,在 Python 2.x 中提供了更高效的序列化和反序列化方法。
在大多數(shù)情況下,使用 cPickle 比使用 pickle 更快。只需使用 import cPickle 代替 import pickle 即可。示例如下:
import cPickle data = {'name': 'Bob', 'age': 30} # 將 data 對象序列化到文件中 with open('data.pickle', 'wb') as f: cPickle.dump(data, f) # 從文件中讀取序列化的對象并反序列化 with open('data.pickle', 'rb') as f: data = cPickle.load(f) print(data) # {'name': 'Bob', 'age': 30}
JSON 序列化
除了 pickle 和 cPickle,Python 還支持 JSON(JavaScript Object Notation)格式的序列化和反序列化。JSON 是一種輕量級的數(shù)據(jù)交換格式,易于人們閱讀和編寫,并且也易于機(jī)器解析和生成。
Python 中可以使用 json 模塊來操作 JSON 格式數(shù)據(jù)。示例如下:
import json data = {'name': 'Charlie', 'age': 35} # 將 data 對象序列化為 JSON 格式字符串 json_str = json.dumps(data) print(json_str) # {"name": "Charlie", "age": 35} # 反序列化 JSON 格式字符串 data = json.loads(json_str) print(data) # {'name': 'Charlie', 'age': 35}
不像 pickle 或 cPickle,JSON 格式數(shù)據(jù)是跨平臺(tái)的,并且可以在不同的語言之間輕松傳輸。