016 pickle
英文也是泡菜的意思。
學(xué)完了,還是感覺這個(gè)模塊是蠻不錯(cuò)的,對多數(shù)據(jù)保存到文件中,然后在使用的時(shí)候,再讀取出來,讓程序閑的更加優(yōu)雅,簡潔。
一:介紹
1.為什么使用
在開篇已經(jīng)介紹了,但是我這里粘貼一下別人對pickle的看法。
pickle是python語言的一個(gè)標(biāo)準(zhǔn)模塊,安裝python后已包含pickle庫,不需要單獨(dú)再安裝。
那么為什么需要序列化和反序列化這一操作呢?
1.便于存儲(chǔ)。序列化過程將文本信息轉(zhuǎn)變?yōu)槎M(jìn)制數(shù)據(jù)流。這樣就信息就容易存儲(chǔ)在硬盤之中,當(dāng)需要讀取文件的時(shí)候,從硬盤中讀取數(shù)據(jù),然后再將其反序列化便可以得到原始的數(shù)據(jù)。在Python程序運(yùn)行中得到了一些字符串、列表、字典等數(shù)據(jù),想要長久的保存下來,方便以后使用,而不是簡單的放入內(nèi)存中關(guān)機(jī)斷電就丟失數(shù)據(jù)。python模塊大全中的Pickle模塊就派上用場了,它可以將對象轉(zhuǎn)換為一種可以傳輸或存儲(chǔ)的格式。
2.便于傳輸。當(dāng)兩個(gè)進(jìn)程在進(jìn)行遠(yuǎn)程通信時(shí),彼此可以發(fā)送各種類型的數(shù)據(jù)。無論是何種類型的數(shù)據(jù),都會(huì)以二進(jìn)制序列的形式在網(wǎng)絡(luò)上傳送。發(fā)送方需要把這個(gè)對象轉(zhuǎn)換為字節(jié)序列,在能在網(wǎng)絡(luò)上傳輸;接收方則需要把字節(jié)序列在恢復(fù)為對象。
?
2.保存
pickle模塊是以二進(jìn)制的形式序列化后保存到文件中(保存文件的后綴為”.pkl”),不能直接打開進(jìn)行預(yù)覽。
而python的另一個(gè)序列化標(biāo)準(zhǔn)模塊json,則是human-readable的,可以直接打開查看(例如在notepad++中查看)。
?
二:操作
1.思路
數(shù)據(jù)不寫多了,這里只寫了一個(gè)列表,做演示。
主要分為兩個(gè)階段,一個(gè)是存放數(shù)據(jù)到文件。
第二個(gè)階段是從文件中讀取數(shù)據(jù),獲取使用。
?
2.程序
1 ###第一階段,屬于腌制 2 import pickle 3 data_list=[1,2,3,4,5,6,7,8,'aaaa',[1,8,'a']] 4 5 file1=open('data.pkl','wb') 6 pickle.dump(data_list, file1) 7 file1.close() 8 9 ###第二階段,屬于使用 10 file2=open('data.pkl','rb') 11 newdata=pickle.load(file2) 12 print(newdata)?
3.效果、
?
4.遇到的問題
module 'pickle' has no attribute 'dump'
解決方式:
python package中的名字寫成了pickle,后來修改成pickleDemo就好了,這個(gè)值得注意一下。
?
總結(jié)
以上是生活随笔為你收集整理的016 pickle的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (Ajax)axios源码简析(三)——
- 下一篇: 148. Sort List