Python序列化模組pickle和json使用和區別

pythontab發表於2017-07-19

這是用於序列化的兩個模組:

• json: 用於字串和python資料型別間進行轉換

• pickle: 用於python特有的型別和python的資料型別間進行轉換

Json模組提供了四個功能:dumps、dump、loads、load 

pickle模組提供了四個功能:dumps、dump、loads、load


pickle用法


dumps可以將資料型別轉換成序列化(只有python才認識)的字串

>>> import pickle
>>> data = {'name':'python', 'site':'pythontab.com'}
>>> pstr = pickle.dumps(data)
>>> print pstr
(dp0
S'name'
p1
S'python'
p2
sS'site'
p3
S'pythontab.com'
p4
s.


將資料轉換成序列化字串,並寫入檔案:

import pickle
data = {'name':'python', 'site':'pythontab.com'}
#開啟檔案,然後將data寫入
with open('dump.data', 'wb') as f:
    pickle.dump(data, f)
#同樣讀取的時候也需要開啟檔案
with open('dump.data', 'rb') as f:
    data_load = pickle.load(f)
print data_load

結果:

{'name':'python', 'site':'pythontab.com'}

檔案中顯示的內容與上面一致


json的用法

json的用法和pickle是一樣的

import json
data = {'name':'python', 'site':'pythontab.com'}
jstr = json.dumps(data)
print jstr, type(jstr)

 

結果:

{"name":"python", "site":"pythontab.com"} <type 'str'>

 

注意: 看起來好像是個字典,但要注意了,實際上這是個字串,因為json只能是字串格式,只是看起來像字典而已。


那pickle和json有什麼區別呢?


json是可以在不同語言之間交換資料的,而pickle只在python之間使用。

json只能序列化最基本的資料型別,而pickle可以序列化所有的資料型別,包括類,函式都可以序列化。


相關文章