成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

21文件IO_pickle-創(chuàng)新互聯(lián)

序列化、反序列化:

石屏ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

為什么要序列化?

內(nèi)存中的字典、鏈表如何保存到一個文件中?

如果是自己定義的類的實例,如何保存到一個文件中?

如何從文件中讀取數(shù)據(jù),并讓它們在內(nèi)存中再次變成自己對應的類的實例?

要設(shè)計一套協(xié)議(協(xié)議有版本,不同版本有不同的實現(xiàn),規(guī)則不一樣),按照某種規(guī)則,把內(nèi)存中數(shù)據(jù)保存到文件中,文件是一個字節(jié)序列,所以必須把數(shù)據(jù)轉(zhuǎn)換成字節(jié)序列,輸出到文件,這就是序列化;反之,從文件的字節(jié)序列恢復到內(nèi)存,就是反序列化;

數(shù)據(jù)轉(zhuǎn)換成二進制的有序序列的過程,稱為序列化;

從文件(有序的二進制序列)轉(zhuǎn)換成某種對象(list、dict等)的過程,稱為反序列化;

serialization序列化,將內(nèi)存中對象存儲下來,把它變成一個個字節(jié)(二進制);

deserialization反序列化,將文件的一個個字節(jié)(二進制)恢復成內(nèi)存中的對象;

注:

持久化,存在磁盤中,掉電不丟失;

序列化保存到文件,就是持久化;

可以將數(shù)據(jù)序列化后持久化(持久化前一定要序列化),或者網(wǎng)絡(luò)傳輸(通常big-edian模式),也可以從文件中或網(wǎng)絡(luò)接收到的字節(jié)序列反序列化;

每一種高級語言都有自己的序列化;

異構(gòu)平臺,兩端,如c/c++<-->python,要約定協(xié)議規(guī)定等;

python提供了pickle庫:

pickle僅限網(wǎng)絡(luò)兩端都是python程序;

import pickle

pickle.dumps(obj,protocol,fix_imports),對象序列化,不落地,在內(nèi)存中操作;

pickle.dump(obj,protocol,fix_imports),對象序列化到文件對象,存入文件;

pickle.loads(data,fix_imports,encoding,errors),對象反序列化,從內(nèi)存加載;

pickle.load(file,fix_imports,encoding,errors),對象反序列化,從文件讀取數(shù)據(jù);

內(nèi)建類型list、dict等,兩邊定義一致;

類、類屬性、類方法,僅序列化類名,兩端若類定義不一致,在調(diào)用后會有問題

對象屬性相關(guān)的,會序列化;而類方法、類屬性不會序列化(僅序列化類名)

總結(jié):

反序列化時,類是棋子,二進制序列就是鐵水;

類似,中央發(fā)往各州縣的錢模;適合分布式;

rpc,遠程過程調(diào)用原型;在網(wǎng)絡(luò)編程中極為重要,底層要實現(xiàn)的就是序列化、反序列化;

dict、list為內(nèi)建的類;

通常需要自定義類,兩邊的自定義要一致;

自定義的序列化要作校驗;

應用:

本地序列化的情況,應用較少;

一般來說,大多數(shù)場景都應用在網(wǎng)絡(luò)中,將數(shù)據(jù)序列化后通過網(wǎng)絡(luò)傳輸?shù)竭h程節(jié)點,遠程服務(wù)器上的服務(wù)接收到數(shù)據(jù)將其反序列化,就可使用了;

但,要注意,遠程接收端,反序列化時,必須有對應的數(shù)據(jù)類型,否則會報錯,尤其是自定義類等,遠程必須要有;

兩端python環(huán)境要一致;是推到遠端,不是遠端來拉;

現(xiàn)在,大多數(shù)項目,都不是單機的,也不是單服務(wù)的,需要通過網(wǎng)絡(luò)將數(shù)據(jù)傳送到其節(jié)點上,這就需要大量的序列化和反序列化;

python程序間可用pickle解決序列化、反序列化;

如果是跨平臺,跨語言、跨協(xié)議,pickle就不太適合了,就需要公共的協(xié)議,如xml、json、protocol buffer(glogle)等;

不同的協(xié)議,效率不同,學習曲線不同,適用不同場景,要根據(jù)不同的情況分析選型;

例(內(nèi)建類型list、dict等,兩邊定義一致):

import pickle

lst = 'a b c'.split()

d = dict(zip('abc',range(3)))

with open('/home/python/magedu/projects/cmdb/bin','wb') as f:

pickle.dump(lst,f)

pickle.dump(d,f)

with open('/home/python/magedu/projects/cmdb/bin','rb') as f:

tmp = pickle.load(f)

print(type(tmp))

print(tmp)

tmp = pickle.load(f)

print(tmp)

注:

運行結(jié)果:

<class 'list'>

['a', 'b', 'c']

{'a': 0, 'b': 1, 'c': 2}

將bin文件放至win上;

21文件IO_pickle

21文件IO_pickle

例(類、類屬性、類方法,僅序列化類名,兩端若類定義不一致,在調(diào)用后會有問題):

import pickle

class AA:

def show(self):

print('abc')

aa = AA()

with open('/home/python/magedu/projects/cmdb/bin2','wb') as f:

pickle.dump(aa,f)

with open('/home/python/magedu/projects/cmdb/bin2','rb') as f:

tmp = pickle.load(f)?? #重新實例化后,賦給tmp,和aa是不同的對象

tmp.show()

注:

運行結(jié)果:

abc

將bin2傳至win主機:

21文件IO_pickle

21文件IO_pickle

linux和win下,兩端若定義的AA不一樣,則有問題;

例(類、類屬性、類方法,僅序列化類名,兩端若類定義不一致,在調(diào)用后會有問題):

import pickle

class AA:

cccc = 'abc'?? #類屬性

def show(self):

print('abcd')

with open('bin3','wb') as f:

pickle.dump(AA(),f)

with open('bin3','rb') as f:

t = pickle.load(f)

t.show()

print(t.cccc)

注:

運行結(jié)果:

abcd

abc

將bin3傳至win主機:

21文件IO_pickle

21文件IO_pickle

例(對象屬性相關(guān)的,會序列化;而類方法、類屬性不會序列化(僅序列化類名)):

import pickle

class AA:

def __init__(self):

self.aa = 'cc'?? #對象屬性,每個對象是獨立的,每個對象可改變此處定義

with open('bin4','wb') as f:

pickle.dump(AA(),f)

with open('bin4','rb') as f:

t = pickle.load(f)

print(t.aa)

注:

運行結(jié)果:

cc

將bin4傳至win主機:

21文件IO_pickle

21文件IO_pickle

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

新聞標題:21文件IO_pickle-創(chuàng)新互聯(lián)
本文網(wǎng)址:http://jinyejixie.com/article22/ccjpjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、ChatGPT小程序開發(fā)、網(wǎng)站設(shè)計公司品牌網(wǎng)站制作、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
乌拉特前旗| 宣汉县| 日照市| 渝北区| 丽江市| 米易县| 宜城市| 茶陵县| 泗阳县| 上栗县| 静海县| 濮阳县| 古交市| 洛浦县| 台州市| 黄陵县| 体育| 长葛市| 方山县| 增城市| 格尔木市| 兰考县| 麟游县| 肃宁县| 清水河县| 偏关县| 本溪市| 伊金霍洛旗| 南江县| 申扎县| 布拖县| 西乡县| 天全县| 旌德县| 平邑县| 黄骅市| 恭城| 安宁市| 宁波市| 读书| 景宁|