序列化模塊_pickle

序列化:

把不能夠直接存儲(chǔ)的數(shù)據(jù)變成字節(jié)流(bytes)保存在文件,
進(jìn)行持久化存儲(chǔ)

反序列化:

把存儲(chǔ)的數(shù)據(jù)(bytes)轉(zhuǎn)化成原本的數(shù)據(jù)類型,

任何數(shù)據(jù)都可以轉(zhuǎn)成字節(jié)流(bytes)進(jìn)行存儲(chǔ)

只有str有encode, decode
其他類型數(shù)據(jù)需要pickle

1. dumps

把任意對象序列化

li = [1, 2, 4]
res = pickle.dumps(li)

# 返回bytes
print(res, type(res))

2. loads

把字節(jié)流轉(zhuǎn)換為原本的數(shù)據(jù)

li1 = pickle.loads(res)

# 轉(zhuǎn)換回的數(shù)據(jù)類型為list
print(li1, type(li1))

3. dump(obj, f)

將數(shù)據(jù)寫入文件

with open('1.txt', 'wb') as f:
   li = [1, 2, 4, 5]

   # 將li轉(zhuǎn)換成bytes, 使用f句柄寫入文件, 沒有返回值
   pickle.dump(li, f)

4. load(f)

讀取寫入文件中的字節(jié)流數(shù)據(jù), 并將其轉(zhuǎn)換成原本的數(shù)據(jù)

with open('1.txt', 'rb') as f:
   res = pickle.load(f)

   # 讀取f中寫入的數(shù)據(jù)對象, 將bytes轉(zhuǎn)換成原本的數(shù)據(jù)類型
   print(res, type(res))

序列化迭代器

iter1 = iter(range(5))
res = pickle.dumps(iter1)

iter2 = pickle.loads(res)
print(iter2, type(iter2))

多數(shù)據(jù)對象使用pickle寫入文件

li = [1, 2, 4, 5]
tup = (1, 2, 4, 5)
dic = {1:2, 2:3, 4:3}
s = 'abc'
setvar = {1, 2, 4}

with open('2.txt', 'wb') as f:
   pickle.dump(li, f)
   pickle.dump(tup, f)
   pickle.dump(setvar, f)
   pickle.dump(dic, f)
   pickle.dump(s, f)


with open('2.txt', 'rb') as f:
   # f也是一個(gè)迭代器,
   # load相當(dāng)于next, 不斷調(diào)用f
   # 返回反序列化后的數(shù)據(jù)
   for i in range(5):
      res = pickle.load(f)
      print(res, type(res))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容