国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

Pythonpickle類庫介紹(對象序列化和反序列化)

來源:懂視網 責編:小采 時間:2020-11-27 14:40:47
文檔

Pythonpickle類庫介紹(對象序列化和反序列化)

Pythonpickle類庫介紹(對象序列化和反序列化):一、pickle pickle模塊用來實現python對象的序列化和反序列化。通常地pickle將python對象序列化為二進制流或文件。 python對象與文件之間的序列化和反序列化: 代碼如下: pickle.dump() pickle.load() 如果要實現python對象和字符串間的
推薦度:
導讀Pythonpickle類庫介紹(對象序列化和反序列化):一、pickle pickle模塊用來實現python對象的序列化和反序列化。通常地pickle將python對象序列化為二進制流或文件。 python對象與文件之間的序列化和反序列化: 代碼如下: pickle.dump() pickle.load() 如果要實現python對象和字符串間的

一、pickle

pickle模塊用來實現python對象的序列化和反序列化。通常地pickle將python對象序列化為二進制流或文件。

python對象與文件之間的序列化和反序列化:

代碼如下:


pickle.dump()
pickle.load()


如果要實現python對象和字符串間的序列化和反序列化,則使用:

代碼如下:


pickle.dumps()
pickle.loads()



可以被序列化的類型有:
* None,True 和 False;
* 整數,浮點數,復數;
* 字符串,字節流,字節數組;
* 包含可pickle對象的tuples,lists,sets和dictionaries;
* 定義在module頂層的函數:
* 定義在module頂層的內置函數;
* 定義在module頂層的類;
* 擁有__dict__()或__setstate__()的自定義類型;

注意:對于函數或類的序列化是以名字來識別的,所以需要import相應的module。

二、pickle的運行過程

在大部分情況下,要是的對象picklable,我們不需要額外的代碼。默認地pickle將智能地檢查類和實例的屬性,當一個類實例反序列化的時候,它的__init__()方法通常不被調用。而是首先創建一個未初始化的實例,然后再回復存儲的屬性。

但是可以通過實現下列的方法來修改默認的行為:

代碼如下:


object.__getstate__() :默認地序列化對象的__dict__,但是如果你實現了__getstate__(),則__getstate__()函數返回的值將被序列化。
object.__setstate__(state) :如果類型實現了此方法,則在反序列化的時候,此方法用來恢復對象的屬性。
object.__getnewargs__() : 如果實例構造的時候(__new__())需要參數,則需要實現此函數。


注意:如果__getstate__()返回False,則在反序列化的時候__setstate__()則不被調用。

有的時候為了效率,或上面的3個函數不能滿足需求時,需要實現__reduce__()函數。

三、實例

代碼如下:


import pickle

# An arbitrary collection of objects supported by pickle.
data = {
'a': [1, 2.0, 3, 4+6j],
'b': ("character string", b"byte string"),
'c': set([None, True, False])
}

with open('data.pickle', 'wb') as f:
# Pickle the 'data' dictionary using the highest protocol available.
pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)


with open('data.pickle', 'rb') as f:
# The protocol version used is detected automatically, so we do not
# have to specify it.
data = pickle.load(f)
print(str(data))

四、修改picklable類型的默認行為

代碼如下:


class TextReader:
"""Print and number lines in a text file."""

def __init__(self, filename):
self.filename = filename
self.file = open(filename)
self.lineno = 0

def readline(self):
self.lineno += 1
line = self.file.readline()
if not line:
return None
if line.endswith('\n'):
line = line[:-1]
return "%i: %s" % (self.lineno, line)

def __getstate__(self):
# Copy the object's state from self.__dict__ which contains
# all our instance attributes. Always use the dict.copy()
# method to avoid modifying the original state.
state = self.__dict__.copy()
# Remove the unpicklable entries.
del state['file']
return state

def __setstate__(self, state):
# Restore instance attributes (i.e., filename and lineno).
self.__dict__.update(state)
# Restore the previously opened file's state. To do so, we need to
# reopen it and read from it until the line count is restored.
file = open(self.filename)
for _ in range(self.lineno):
file.readline()
# Finally, save the file.
self.file = file

reader = TextReader("hello.txt")
print(reader.readline())
print(reader.readline())
s = pickle.dumps(reader)
#print(s)
new_reader = pickle.loads(s)
print(new_reader.readline())

# the output is
# 1: hello
# 2: how are you
# 3: goodbye

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Pythonpickle類庫介紹(對象序列化和反序列化)

Pythonpickle類庫介紹(對象序列化和反序列化):一、pickle pickle模塊用來實現python對象的序列化和反序列化。通常地pickle將python對象序列化為二進制流或文件。 python對象與文件之間的序列化和反序列化: 代碼如下: pickle.dump() pickle.load() 如果要實現python對象和字符串間的
推薦度:
標簽: python () pic
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 人人揉揉香蕉大青草 | 日韩三级一区二区 | 一级毛片在线全部免费播放 | 看全黄大色大黄美女 | 青青草国产在线视频 | 国产日产欧美一区二区三区 | 亚洲欧美中文字幕 | 免费一区二区 | 欧美 日韩 国产 在线 | 最新国产精品精品视频 | 欧美国产精品va在线观看 | 欧美一区精品二区三区 | 色另类| 国产精品一区二区三区四区五区 | 自拍偷拍 欧美日韩 | 亚洲视频入口 | 国产精品一区二区久久精品 | 国产九九热| 国产精品视频观看 | 一区免费在线观看 | 国产激情一级毛片久久久 | 日韩在线二区 | 亚洲第一视频 | 欧美色欧美亚洲另类 | 欧美一区二区三区免费播放 | 精品视频亚洲 | 亚洲国产精品免费视频 | 欧美亚洲综合图区在线 | 永久毛片 | 久久精品一区二区三区不卡牛牛 | 国产精品久久二区三区色裕 | 国产精品亚洲精品日韩动图 | 国产精品亚洲一区二区三区 | 久久精品屋| 国产精品免费观看 | 日本三级成人中文字幕乱码 | 国产区精品福利在线社区 | 亚欧精品一区二区三区 | 亚洲精品成人久久 | 久久精品无码一区二区日韩av | 国产在线精品99一卡2卡 |