最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

一、pickle 模塊下的方法

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

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

1. dumps()

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

示例

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)制對象數(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 中的對象序列化成二進(jìn)制對象,并寫入文件。

示例

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è)文件只用于寫入,否則會報(bào)錯。

執(zhí)行成功后,同級目錄下生成一個(gè)test_pickle.txt文件,因?yàn)槭嵌M(jìn)制內(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:
    # 將二進(jìn)制文件對象轉(zhuǎn)換成 Python 對象 p3
    p3 = pickle.load(f)
    print(p3)
    print("類型:", type(p3))

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

執(zhí)行成功。

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

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

下列類型可以被封存:

  • None、True 和 False
  • 整數(shù)、浮點(diǎn)數(shù)、復(fù)數(shù)
  • str、byte、bytearray
  • 只包含可封存對象的集合,包括 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,對一個(gè)不信任的JSON進(jìn)行反序列化的操作本身不會造成任意代碼執(zhí)行漏洞。

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

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

相關(guān)文章

  • python 如何在測試中使用 Mock

    python 如何在測試中使用 Mock

    這篇文章主要介紹了python 如何在測試中使用 Mock,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • 在Django admin中編輯ManyToManyField的實(shí)現(xiàn)方法

    在Django admin中編輯ManyToManyField的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇在Django admin中編輯ManyToManyField的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 利用python庫matplotlib繪制不同的圖表

    利用python庫matplotlib繪制不同的圖表

    這篇文章主要介紹了利用python庫matplotlib繪制不同的圖表,使用python中的matplotlib繪制圖表,主要分享繪制簡單的曲線圖、單條曲線圖、多條曲線圖、直方圖以及散點(diǎn)圖的思路和用法,需要的朋友可以參考一下
    2022-03-03
  • Python的條件表達(dá)式和lambda表達(dá)式實(shí)例

    Python的條件表達(dá)式和lambda表達(dá)式實(shí)例

    今天小編就為大家分享一篇Python的條件表達(dá)式和lambda表達(dá)式實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Django 過濾器匯總及自定義過濾器使用詳解

    Django 過濾器匯總及自定義過濾器使用詳解

    這篇文章主要介紹了Django 過濾器匯總及自定義過濾器使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • python Boltons庫實(shí)用功能探索(深度復(fù)制類型檢查重試機(jī)制)

    python Boltons庫實(shí)用功能探索(深度復(fù)制類型檢查重試機(jī)制)

    這篇文章主要為大家介紹了python Boltons庫實(shí)用功能探索包含深度復(fù)制類型檢查重試機(jī)制及數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • python版簡單工廠模式

    python版簡單工廠模式

    這篇文章主要為大家詳細(xì)介紹了python版簡單工廠模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Flask框架的學(xué)習(xí)指南之開發(fā)環(huán)境搭建

    Flask框架的學(xué)習(xí)指南之開發(fā)環(huán)境搭建

    本文是Flask框架的學(xué)習(xí)指南系列文章的第一篇,主要給大家講述的是開發(fā)環(huán)境的搭建工作,有需要的小伙伴可以參考下
    2016-11-11
  • Python模塊介紹與使用詳細(xì)講解

    Python模塊介紹與使用詳細(xì)講解

    這篇文章主要介紹了Python模塊介紹與使用詳細(xì)講解,包括模塊的相關(guān)概念和使用方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • pandas處理csv文件的方法步驟

    pandas處理csv文件的方法步驟

    這篇文章主要介紹了pandas處理csv文件的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評論

民和| 河源市| 石首市| 蒙山县| 莱芜市| 肥东县| 榕江县| 灌阳县| 咸丰县| 镇江市| 车险| 土默特左旗| 巫溪县| 鹿邑县| 句容市| 迁西县| 望谟县| 疏勒县| 翁源县| 固安县| 乐山市| 宝清县| 普安县| 余姚市| 凤山市| 武宁县| 马关县| 临清市| 灵台县| 古蔺县| 兴隆县| 东阳市| 徐闻县| 宜川县| 昌黎县| 含山县| 电白县| 开远市| 迁安市| 宁武县| 芜湖县|