關(guān)于python的對象序列化介紹
對象:是抽象的概念 如列表 元組 字典 集合 皆為對象
序列化:一種方法。目的:把對象存儲在磁盤上(即,將對象轉(zhuǎn)換為字節(jié)數(shù)據(jù)/字符數(shù)據(jù))。
這一過程我們借助序列化這一方法實現(xiàn)。
為什么需要序列化和反序列化這一操作呢?
1.便于存儲。序列化過程將文本信息轉(zhuǎn)變?yōu)槎M(jìn)制數(shù)據(jù)流。信息就容易存儲在硬盤之中,當(dāng)需要讀取文件的時候,從硬盤中讀取數(shù)據(jù),然后再將其反序列化便可以得到原始的數(shù)據(jù)。在Python程序運行中得到了一些字符串、列表、字典等數(shù)據(jù),想要長久的保存下來,方便以后使用,而不是簡單的放入內(nèi)存中關(guān)機斷電就丟失數(shù)據(jù)。
2.便于傳輸。當(dāng)兩個進(jìn)程在進(jìn)行遠(yuǎn)程通信時,彼此可以發(fā)送各種類型的數(shù)據(jù)。無論是何種類型的數(shù)據(jù),都會以二進(jìn)制序列的形式在網(wǎng)絡(luò)上傳送。發(fā)送方需要把這個對象轉(zhuǎn)換為字節(jié)序列,在能在網(wǎng)絡(luò)上傳輸;接收方則需要把字節(jié)序列在恢復(fù)為對象。
兩個模塊實現(xiàn)序列化
1.pickle模塊
pickle模塊實現(xiàn)了基本的數(shù)據(jù)序列化和反序列化。通過pickle模塊的序列化操作我們能夠?qū)⒊绦蛑羞\行的對象信息保存到文件中去,永久存儲;通過pickle模塊的反序列化操作,我們能夠從文件中創(chuàng)建上一次程序保存的對象。
pickle模塊中的四個方法:dumps dump loads load
#dumps將對象序列化為字節(jié)數(shù)據(jù)
>>> import pickle
>>> ls = [1,2,3]
>>> data = pickle.dumps(ls)
>>> data
b'\x80\x04\x95\x0b\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03e.'
>>> f=open("a.txt",mode="wb")
>>> f.write(data)
22
>>> f.close()
>>> f=open("a.txt",mode="rb")
>>> f.read()
b'\x80\x04\x95\x0b\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03e.'
>>> f.close()
#dump將對象序列化為字節(jié)數(shù)據(jù)并且保存到file文件中
>>> ls=[2,3,4]
>>> pickle.dump(ls,open("a.txt",mode="wb"))
>>> f=open("a.txt",mode="rb")
>>> f.read()
b'\x80\x04\x95\x0b\x00\x00\x00\x00\x00\x00\x00]\x94(K\x02K\x03K\x04e.'
#loads將字節(jié)數(shù)據(jù)反序列化為對象
>>> f =open("a.txt","rb")
>>> show = f.read()
>>> show
b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03K\x04K\x05e.'
>>> show=pickle.loads(show)
>>> show
[1, 2, 3, 4, 5]
>>> f.close()
#load將file中的字節(jié)數(shù)據(jù)反序列化為對象
>>> pickle.load(open("a.txt","rb"))
[1, 2, 3, 4, 5]
2.json模塊
json模塊是將對象序列化為字符數(shù)據(jù),json模塊一樣有dumps dump loads load方法,注意:json模塊一般是用來序列化字典對象
#dumps方法
>>> import json
>>> d={"usename":"zhangsan","age":17}
>>> json.dumps(d)
'{"usename": "zhangsan", "age": 17}'
>>> s=json.dumps(d)
>>> f=open("a.txt","wt")
>>> f.write(s)
34
>>> f.close()
#loads方法
>>> f=open("a.txt","rt")
>>> ss = f.read()
>>> ss
'{"usename": "zhangsan", "age": 17}'
>>> json.loads(ss)
{'usename': 'zhangsan', 'age': 17}
>>> dd = json.loads(ss)
>>> dd
{'usename': 'zhangsan', 'age': 17}
>>> f.close()到此這篇關(guān)于關(guān)于python的對象序列化介紹的文章就介紹到這了,更多相關(guān)python對象序列化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中實現(xiàn)數(shù)組和列表讀取一列的方法
下面小編就為大家分享一篇python中實現(xiàn)數(shù)組和列表讀取一列的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Pygame出現(xiàn)播放背景音樂卡頓的問題分析及解決(發(fā)生在win10更新至win11后)
Pygame是常用的游戲開發(fā)庫之一,然而在使用Pygame的過程中,卻出現(xiàn)了播放背景音樂卡頓的問題,表現(xiàn)為咯咯咯的噪音,所以本文記錄了Pygame出現(xiàn)播放背景音樂卡頓的問題分析及解決,需要的朋友可以參考下2024-02-02
Pandas?DataFrame添加一行數(shù)據(jù)的幾種方法
在處理數(shù)據(jù)分析和數(shù)據(jù)科學(xué)項目時,經(jīng)常會使用到Python中的pandas庫來進(jìn)行數(shù)據(jù)操作和分析,其中DataFrame是pandas庫中最重要的數(shù)據(jù)結(jié)構(gòu)之一,這篇文章主要給大家介紹了關(guān)于Pandas?DataFrame添加一行數(shù)據(jù)的幾種方法,需要的朋友可以參考下2024-08-08

