首頁 > 後端開發 > Python教學 > 什麼是python中的序列化? (實例解析)

什麼是python中的序列化? (實例解析)

乌拉乌拉~
發布: 2018-08-23 13:38:22
原創
2919 人瀏覽過

 在以下的文章之中我們來了解什麼是python中的序列化。了解一下python序列化的相關知識,以及python序列化在python程式設計之中能起到什麼樣的作用。

在程式運行的過程中,所有的變數都是在記憶體中,例如,定義一個dict:

d = dict(name='Bob', age=20, score=88)
登入後複製

可以隨時修改變量,例如把name改成'Bill',但是一旦程式結束,變數所佔用的記憶體就會被作業系統全部回收。如果沒有把修改過的'Bill'儲存到磁碟上,下次重新執行程序,變數又被初始化為'Bob'。

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

序列化之後,就可以把序列化後的內容寫入磁碟,或是透過網路傳輸到別的機器上。

反過來,把變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化,即unpickling。

Python提供了pickle模組來實現序列化。

首先,我們試著把一個物件序列化並寫入檔案:

>>> import pickle
>>> d = dict(name='Bob', age=20, score=88)
>>> pickle.dumps(d)
b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.'
登入後複製

pickle.dumps()方法把任意物件序列化成一個bytes,然後,就可以把這個bytes寫入文件。或用另一個方法pickle.dump()直接把物件序列化後寫入一個file-like Object:

>>> f = open('dump.txt', 'wb')
>>> pickle.dump(d, f)
>>> f.close()
登入後複製

看看寫入的dump.txt文件,一堆亂七八糟的內容,這些都是Python保存的物件內部資訊。

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

>>> f = open('dump.txt', 'rb')
>>> d = pickle.load(f)
>>> f.close()
>>> d
{'age': 20, 'score': 88, 'name': 'Bob'}
登入後複製

變數的內容又回來了!

當然,這個變數和原來的變數是完全不相干的對象,它們只是內容相同而已。

Pickle的問題和所有其他程式語言特有的序列化問題一樣,就是它只能用於Python,並且可能不同版本的Python彼此都不相容,因此,只能用Pickle保存那些不重要的數據,不能成功地反序列化也沒關係。

以上就是本篇文章所講述的所有內容,這篇文章主要介紹了python序列化的相關知識,希望你能藉助資料從而理解上述所說的內容。希望我在這片文章所講述的內容能夠對你有幫助,讓你學習python更加輕鬆。

更多相關知識,請造訪php中文網Python教學欄位。

以上是什麼是python中的序列化? (實例解析)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板