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

關于如何把Python對象存儲為文件的方法詳解

 更新時間:2024年01月25日 11:32:26   作者:微小冷  
本文將給大家介紹如何把Python對象存儲為文件的方法,pickle可以用二進制表示并讀寫python數據,這個功能并不安全,如果把一個pickle暴露給別人,有被植入惡意程序的風險,文中通過代碼給大家講解的非常詳細,需要的朋友可以參考下

加載和保存

pickle中有兩組加載和保存函數

保存加載
交互文件dumpload
交互字節(jié)碼dumpsloads

例如

x = [i**2 for i in range(10)]
import pickle
s = pickle.dumps(x)
print(s)
# b'\x80\x04\x95\x19\x00\x00\x00\x00\x00\x00\x00]\x94(K\x00K\x01K\x04K\tK\x10K\x19K$K1K@KQe.'
with open("test.pickle", 'wb') as f:
   pickle.dump(x, f)        # 將x存為f

x存儲為文件之后,還可以重新打開

with open("test.pickle", 'rb') as f:
    y = pickle.load(f)

print(y)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

注意事項

除了不夠安全之外,使用pickle另外一個需要注意的是,到目前為止,pickle已經有6個版本,其中v0v1過于古老,基本沒什么能用的地方;v3以后的版本則不再支持Python2,下表列出了自v2v5的一些更新特性

引入版本文檔
v2Python 2.3PEP307為 新式類 提供了更高效的封存機制。
v3Python 3.0顯式地支持字節(jié)對象
為Python 3.0-3.7 的默認協議。
v4Python 3.4PEP 3154支持存儲較大對象,并針對數據格式進行了優(yōu)化
Python 3.8使用的默認協議。
v5Python 3.8PEP 574增加對帶外數據的支持,并可加速帶內數據處理

理論上講,pickle可以封裝一切python對象,所以對于一些比較耗時的算法,可以通過pickle來保存當前的狀態(tài)。但要注意,盡管pickle可以封存函數,但并不能封存匿名函數

test = lambda x : x
s = pickle.dumps(test)  # 報錯
def test(x):
    print(x)

s = pickle.dumps(test)
print(s)
#b'\x80\x04\x95\x15\x00\x00\x00\x00\x00\x00\x00\x8c\x08__main__\x94\x8c\x04test\x94\x93\x94.'

copyreg

python標準庫中還提供了copyreg模塊,可以注冊一個封存函數,在對某個對象進行封存時可調用。示例如下

import copyreg, pickle
class C:
    def __init__(self, a):
        self.a = a

def pickle_c(c):
    print("您封存了一個C對象")
    return C, (c.a,)

copyreg.pickle(C, pickle_c)
c = C(1)

p = pickle.dumps(c)
# 您封存了一個C對象

在通過copyreg.pickle對類型C注冊函數pickle_c之后,再去用pickle.dumps對c的對象進行封存,就會調用pickle_c,從而打印出預設的字符串。

在copyreg.pickle中注冊的函數,必須返回一個字符串或包含二至六個元素的元組。

命令行工具

python標準庫還提供了pickle的命令行工具,調用格式如下,其中x.pickle是一個封裝了python對象的二進制文件。

python -m pickle x.pickle

常見的命令行選項如下表

指令說明
-a–annotate使用簡短的操作碼描述來標注每一行。
-o–output=<file>輸出應當寫入到的文件名稱。
-l–indentlevel=<num>一個新的 MARK 層級所需縮進的空格數。
-m–memo當反匯編多個對象時,保留各個反匯編的備忘記錄。
-p–preamble=<preamble>當指定一個以上的 pickle 文件時,在每次反匯編之前打印給定的前言。

以上就是關于如何把Python對象存儲為文件的方法詳解的詳細內容,更多關于Python對象存儲為文件的資料請關注腳本之家其它相關文章!

相關文章

  • python 實現方陣的對角線遍歷示例

    python 實現方陣的對角線遍歷示例

    今天小編就為大家分享一篇python 實現方陣的對角線遍歷示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 使用seaborn繪制強化學習中的圖片問題

    使用seaborn繪制強化學習中的圖片問題

    這篇文章主要介紹了使用seaborn繪制強化學習中的圖片問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Python 實現將大圖切片成小圖,將小圖組合成大圖的例子

    Python 實現將大圖切片成小圖,將小圖組合成大圖的例子

    這篇文章主要介紹了Python 實現將大圖切片成小圖,將小圖組合成大圖的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 簡要講解Python編程中線程的創(chuàng)建與鎖的使用

    簡要講解Python編程中線程的創(chuàng)建與鎖的使用

    這篇文章主要介紹了簡要講解Python編程中線程的創(chuàng)建與鎖的使用,Python中雖然有GIL的存在,但依然是能夠創(chuàng)建多個線程來交替使用的,需要的朋友可以參考下
    2016-02-02
  • python捕獲異常后繼續(xù)執(zhí)行問題

    python捕獲異常后繼續(xù)執(zhí)行問題

    這篇文章主要介紹了python捕獲異常后繼續(xù)執(zhí)行問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python實現從url中提取域名的幾種方法

    Python實現從url中提取域名的幾種方法

    這篇文章主要介紹了Python實現從url中提取域名的幾種方法,本文給出了3種方法實現在URL中提取域名的需求,需要的朋友可以參考下
    2014-09-09
  • 淺談Python中的模塊

    淺談Python中的模塊

    這篇文章主要介紹了Python中的模塊相關知識,文中代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解下
    2020-06-06
  • Python Tornado實現WEB服務器Socket服務器共存并實現交互的方法

    Python Tornado實現WEB服務器Socket服務器共存并實現交互的方法

    這篇文章主要介紹了Python Tornado實現WEB服務器Socket服務器共存并實現交互的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • python多線程中獲取函數返回值的三種方法

    python多線程中獲取函數返回值的三種方法

    本文主要介紹了python多線程中獲取函數返回值的三種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • 如何用Django處理gzip數據流

    如何用Django處理gzip數據流

    這篇文章主要介紹了如何用Django處理gzip數據流,幫助大家更好的理解和使用django框架,感興趣的朋友可以了解下
    2021-01-01

最新評論