1. 序列化定義
- 把對象(變量)從內存中變成可存儲或傳輸的過程稱之爲序列化, 在Python中叫pickling,其餘語言中稱之爲serialization等;
- 序列化以後,就能夠把序列化後的內容寫入磁盤,或者經過網絡傳輸到別的機器上;
- 把變量內容從序列化的對象從新讀到內存裏稱之爲反序列化,即unpickling;
# 示例一:將字典寫入到文件中 dic = str({'1':'111'}) f = open('test', 'w') f.write(dic) # 寫入失敗:write() argument must be str, not set # 示例二: 讀入文件中的字典 f.open('test', 'r') data = f.read() print(eval(data)['1']) # 此處,須要將data使用 eval()函數進行轉換
2. JSON
# 示例一: 序列化 import json dic = {'name': '小虎', 'age': '19'} data = json.dumps(dic) f = open('JSON_text', 'w') f.write(data) f.close() # 使用 dump f = open('JSON_text', 'w') json.dump(dic, f) f.close() # 示例二: 反序列化 import json f = open('JSON_text', 'r') data = f.read() data = json.loads(data) print(data['name']) # 使用 load f = open('JSON_text', 'r') data = json.load(f) print(data['name'])
3. pickle
- pickle 模塊基本上功能使用和JSON模塊沒有太大區別;
- pickle 不是用於多種語言間的數據傳輸,它僅做爲python對象的持久化或python程序間進行互相傳輸對象的方法;
# 示例一: 序列化 import pickle def foo(): print('ok') data = pickle.dumps(foo) f = open('PICKLE_text', 'wb') # wb write byte f.write(data) f.close() # 示例二: 反序列化 import pickle def foo(): print('ok') f = open('PICKLE_text', 'rb') data = f.read() data = pickle.loads(data) data()
4. shelve 模塊
- shelve模塊比pickle模塊簡單,只有一個
open
函數,返回相似字典的對象,可讀可寫;key必須爲字符串,而值能夠是 Python所支持的數據類型。
# 示例: # 序列化 import shelve f = shelve.open(r'shelve.txt') f['info'] = {'name':'lisi', 'age': '14'} # 反序列化 f = shelve.open('shelve.txt') print(f.get('info'))
<br/>html
參考資料:python
Python 全棧json