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

用來將對象持久化的python pickle模塊

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

前言

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

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

一、pickle 模塊下的方法

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

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

1. dumps()

將 Python 中的對象序列化成二進制對象,并直接返回。

示例

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()

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

示例在上面的基礎(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 對象 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 反序列化后的對象與原對象是等值的副本對象,類似deepcopy。

3. dump()

將 Python 中的對象序列化成二進制對象,并寫入文件。

示例

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",以二進制格式打開一個文件只用于寫入,否則會報錯。

執(zhí)行成功后,同級目錄下生成一個test_pickle.txt文件,因為是二進制內(nèi)容,直接打開看到的是亂碼。

4. load()

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

示例

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:
    # 將二進制文件對象轉(zhuǎn)換成 Python 對象 p3
    p3 = pickle.load(f)
    print(p3)
    print("類型:", type(p3))

注意,這里讀取文件用rb,也就是以二進制格式打開一個文件用于只讀。

執(zhí)行成功。

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

二、可以被 pickle 封存/解封的對象

下列類型可以被封存:

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

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

    python自動化實現(xiàn)的簡單使用

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

    Python3多線程基礎(chǔ)知識點

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

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

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

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

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

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

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

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

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

    對python中的裝包與解包實例詳解

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

    使用Python讀寫csv文件

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

最新評論