序列化--dict與(file)文件讀寫


在程序運行的過程中,所有的變量都是在內存中,比如,定義一個dict:

d = dict(name='Bob', age=20, score=88)

可以隨時修改變量,比如把name改成'Bill',但是一旦程序結束,變量所占用的內存就被操作系統全部回收。如果沒有把修改后的'Bill'存儲到磁盤上,下次重新運行程序,變量又被初始化為'Bob'

我們把變量從內存中變成可存儲或傳輸的過程稱之為序列化,在Python中叫pickling,在其他語言中也被稱之為serialization,marshalling,flattening等等,都是一個意思。

序列化之后,就可以把序列化后的內容寫入磁盤,或者通過網絡傳輸到別的機器上。

反過來,把變量內容從序列化的對象重新讀到內存里稱之為反序列化,即unpickling

Python提供兩個模塊來實現序列化:cPickle和pickle
import pickle
f = open("F:/mologa-workspace/goods.txt","wb")

d = dict(name='mologa',password='mologa123',assets=88)
print(d)
pickle.dump(d,f)

f.close()

pickle.dump()直接把對象序列化后寫入一個file-like Object

當我們要把對象從磁盤讀到內存時,可以先把內容讀到一個str,然后用pickle.loads()方法反序列化出對象,也可以直接用pickle.load()方法從一個file-like Object中直接反序列化出對象。
我們打開另一個Python命令行來反序列化剛才保存的對象:

import pickle
f = open("F:/mologa-workspace/goods.txt","rb")
d = pickle.load(f)
f.close()
print(d)
結果輸出:
F:\Python35\python.exe F:/mologa-workspace/7th.py
{'assets': 88, 'name': 'mologa', 'password': 'mologa123'}

Process finished with exit code 0


免責聲明!

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



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