欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用來將對(duì)象持久化的python pickle模塊

 更新時(shí)間:2022年05月26日 09:58:46   作者:把蘋果咬哭  
這篇文章主要為大家介紹了用來將對(duì)象持久化的python pickle模塊的用例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

pickle 模塊可以對(duì)一個(gè) Python 對(duì)象的二進(jìn)制進(jìn)行序列化和反序列化。說白了,就是它能夠?qū)崿F(xiàn)任意對(duì)象與二進(jìn)制直接的相互轉(zhuǎn)化,也可以實(shí)現(xiàn)對(duì)象與文本之間的相互轉(zhuǎn)化。

比如,我程序里有一個(gè) python 對(duì)象,我想把它存到磁盤里,于是我用 pickle 把他轉(zhuǎn)到一個(gè)文本里。當(dāng)后面我想使用的時(shí)候,讀取出來時(shí)候依然是一個(gè) python 對(duì)象。

一、pickle 模塊下的方法

pickle 模塊提供了以下 4 種方法:

  • dump():將 Python 中的對(duì)象序列化成二進(jìn)制對(duì)象,并寫入文件
  • load():讀取指定的序列化數(shù)據(jù)文件,并返回對(duì)象
  • dumps():將 Python 中的對(duì)象序列化成二進(jìn)制對(duì)象,并直接返回,而不是將其寫入到文件
  • loads():讀取給定的二進(jìn)制對(duì)象數(shù)據(jù),并將其轉(zhuǎn)換為 Python 對(duì)象

1. dumps()

將 Python 中的對(duì)象序列化成二進(jìn)制對(duì)象,并直接返回。

示例

import pickle
test_list = ["pingguo", {1, 2, 3}, None]
# 使用 dumps() 函數(shù)將 test_list 轉(zhuǎn)成 p1
p1 = pickle.dumps(test_list)
print(p1)
print("返回類型:", type(p1))

輸出結(jié)果:

b'\x80\x03]q\x00(X\x07\x00\x00\x00pingguoq\x01cbuiltins\nset\nq\x02]q\x03(K\x01K\x02K\x03e\x85q\x04Rq\x05Ne.'
返回類型: <class 'bytes'>

2. loads()

讀取給定的二進(jìn)制對(duì)象數(shù)據(jù),并將其轉(zhuǎn)換為 Python 對(duì)象。

示例在上面的基礎(chǔ)上繼續(xù):

import pickle
test_list = ["pingguo", {1, 2, 3}, None]
# 使用 dumps() 函數(shù)將 test_list 轉(zhuǎn)成 p1
p1 = pickle.dumps(test_list)
print(p1)
print("返回類型:", type(p1))
# 使用 loads() 函數(shù)將 p1 轉(zhuǎn)成 Python 對(duì)象 p2
p2 = pickle.loads(p1)
print(p2)
print("返回類型:", type(p2))

輸出結(jié)果:

b'\x80\x03]q\x00(X\x07\x00\x00\x00pingguoq\x01cbuiltins\nset\nq\x02]q\x03(K\x01K\x02K\x03e\x85q\x04Rq\x05Ne.'
返回類型: <class 'bytes'>
['pingguo', {1, 2, 3}, None]
返回類型: <class 'list'>

pickle 反序列化后的對(duì)象與原對(duì)象是等值的副本對(duì)象,類似deepcopy。

3. dump()

將 Python 中的對(duì)象序列化成二進(jìn)制對(duì)象,并寫入文件。

示例

import pickle
test_list = ["pingguo", {1, 2, 3}, None]
with open("test_pickle.txt", "wb") as f:
    # 使用 dump() 函數(shù)將 test_list 轉(zhuǎn)成 p1,寫到txt文本里
    pickle.dump(test_list, f)

注意這里的寫文件是 "wb",以二進(jìn)制格式打開一個(gè)文件只用于寫入,否則會(huì)報(bào)錯(cuò)。

執(zhí)行成功后,同級(jí)目錄下生成一個(gè)test_pickle.txt文件,因?yàn)槭嵌M(jìn)制內(nèi)容,直接打開看到的是亂碼。

4. load()

讀取指定的序列化數(shù)據(jù)文件,并返回對(duì)象。

示例

import pickle
test_list = ["pingguo", {1, 2, 3}, None]
with open("test_pickle.txt", "wb") as f:
    # 使用 dump() 函數(shù)將 test_list 轉(zhuǎn)成 p1,寫到txt文本里
    pickle.dump(test_list, f)
with open("test_pickle.txt", "rb") as f:
    # 將二進(jìn)制文件對(duì)象轉(zhuǎn)換成 Python 對(duì)象 p3
    p3 = pickle.load(f)
    print(p3)
    print("類型:", type(p3))

注意,這里讀取文件用rb,也就是以二進(jìn)制格式打開一個(gè)文件用于只讀。

執(zhí)行成功。

['pingguo', {1, 2, 3}, None]
類型: <class 'list'>

二、可以被 pickle 封存/解封的對(duì)象

下列類型可以被封存:

  • None、True 和 False
  • 整數(shù)、浮點(diǎn)數(shù)、復(fù)數(shù)
  • str、byte、bytearray
  • 只包含可封存對(duì)象的集合,包括 tuple、list、set 和 dict
  • 定義在模塊最外層的函數(shù)(使用 def 定義,lambda 函數(shù)則不可以)
  • 定義在模塊最外層的內(nèi)置函數(shù)
  • 定義在模塊最外層的類
  • 某些類實(shí)例,這些類的 dict 屬性值或 getstate() 函數(shù)的返回值可以被封存。

三、pickle 與 json 的區(qū)別

python 提供的 json 標(biāo)準(zhǔn)庫相信大家都熟悉,提供的方法也與 pickle 相似,那么兩者有什么區(qū)別呢?

  • JSON 是一個(gè)文本序列化格式,pickle 是一個(gè)二進(jìn)制序列化格式。
  • JSON 是我們可以直觀閱讀的,而 pickle 不行。
  • JSON是可互操作的,在Python之外也可以使用,而pickle則是Python專用的。
  • 默認(rèn)情況下,JSON 只能表示 Python 內(nèi)置類型的子集,不能表示自定義的類;但 pickle 可以表示大量的 Python 數(shù)據(jù)類型。
  • JSON不像 pickle,對(duì)一個(gè)不信任的JSON進(jìn)行反序列化的操作本身不會(huì)造成任意代碼執(zhí)行漏洞。

關(guān)于最后一點(diǎn),說的是 pickle 模塊并不安全。很有可能你去解封的是惡意構(gòu)建的 pickle 數(shù)據(jù),造成解封時(shí)執(zhí)行了惡意代碼,所以要慎用。

以上就是用來將對(duì)象持久化的python pickle模塊的詳細(xì)內(nèi)容,更多關(guān)于python對(duì)象持久化pickle模塊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python enumerate函數(shù)功能與用法示例

    Python enumerate函數(shù)功能與用法示例

    這篇文章主要介紹了Python enumerate函數(shù)功能與用法,結(jié)合實(shí)例形式分析了enumerate函數(shù)針對(duì)列表、字符串遍歷操作相關(guān)使用技巧,需要的朋友可以參考下
    2019-03-03
  • python字符串常見使用操作方法介紹

    python字符串常見使用操作方法介紹

    本文介紹python字符串使用方法,Python最常見數(shù)據(jù)類型就是字符串,無論哪種編程語言,字符串無處不在,比如從用戶那里讀取字符串,并將字符串打印到屏幕顯示出來,字符串是一種數(shù)據(jù)結(jié)構(gòu),下文詳細(xì)內(nèi)容介紹需要的朋友可以參考一下
    2022-03-03
  • python自動(dòng)化實(shí)現(xiàn)的簡單使用

    python自動(dòng)化實(shí)現(xiàn)的簡單使用

    本文主要介紹了python自動(dòng)化實(shí)現(xiàn)的簡單使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Python3多線程基礎(chǔ)知識(shí)點(diǎn)

    Python3多線程基礎(chǔ)知識(shí)點(diǎn)

    在本篇內(nèi)容里小編給大家分享了關(guān)于Python3多線程基礎(chǔ)知識(shí)點(diǎn)內(nèi)容,需要的朋友們跟著學(xué)習(xí)參考下。
    2019-02-02
  • Django日志及中間件模塊應(yīng)用案例

    Django日志及中間件模塊應(yīng)用案例

    這篇文章主要介紹了Django日志及中間件模塊應(yīng)用案例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 淺談Python編程中3個(gè)常用的數(shù)據(jù)結(jié)構(gòu)和算法

    淺談Python編程中3個(gè)常用的數(shù)據(jù)結(jié)構(gòu)和算法

    這篇文章主要介紹了淺談Python編程中3個(gè)常用的數(shù)據(jù)結(jié)構(gòu)和算法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-04-04
  • python實(shí)現(xiàn)在遍歷列表時(shí),直接對(duì)dict元素增加字段的方法

    python實(shí)現(xiàn)在遍歷列表時(shí),直接對(duì)dict元素增加字段的方法

    今天小編就為大家分享一篇python實(shí)現(xiàn)在遍歷列表時(shí),直接對(duì)dict元素增加字段的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • kafka監(jiān)控獲取指定topic的消息總量示例

    kafka監(jiān)控獲取指定topic的消息總量示例

    今天小編就為大家分享一篇kafka監(jiān)控獲取指定topic的消息總量示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 對(duì)python中的裝包與解包實(shí)例詳解

    對(duì)python中的裝包與解包實(shí)例詳解

    今天小編就為大家分享一篇對(duì)python中的裝包與解包實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 使用Python讀寫csv文件

    使用Python讀寫csv文件

    大家好,本篇文章主要講的是使用Python讀寫csv文件,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02

最新評(píng)論