溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python數據序列化的pickle模塊怎么用

發布時間:2022-03-07 09:09:34 來源:億速云 閱讀:280 作者:iii 欄目:開發技術

這篇文章主要介紹了Python數據序列化的pickle模塊怎么用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Python數據序列化的pickle模塊怎么用文章都會有所收獲,下面我們一起來看看吧。

前言:

在英語中 pickle 名詞是泡菜,動詞是腌漬的意思??梢岳斫鉃榘褨|西腌起來保存成文件,要用的時候讀出來洗洗再用。

pythonpickle模塊實現了基本的數據序列化和反序列化。

序列化對象可以在磁盤上保存對象,并在需要的時候讀取出來。任何對象都可以執行序列化操作。

pickle的本質是將Python數據還原為內存中的二進制數據,供用戶轉移、儲存。

pickle模塊通常會在2種場景下使用:

  • 將Python的數據保存為磁盤上的二進制文件,需要時讀取還原為Python數據,可以是可打印的基本數據(字符串、列表、字典等等),也可以是不可打印的類數據。相比之下,使用Json方式只能保存可打印的基本數據

  • 將已經創建好的類數據字符串化,保存為一個變量。在程序下次運行時直接讀取變量還原為類數據,省去類數據的創建過程

1 將Python數據存儲為本地文件

設計一個程序,輸出產物是Excel工作簿output.xlsx,工作簿中有一個工作表out_sheet 是從 標準文檔input.xlsx中的 in_sheet 中復制而來。

工作表in_sheet 的內容很龐大,難以用手動重現,通常我們會選擇將 標準文檔 input.xlsx 作為程序的引用素材放在工程里。程序運行過程中將工作表 in_sheet復制到工作表out_sheet中。

如果我們要求不能明文存儲 工作表 in_sheet文件,只能存儲工作表對應的Worksheet()數據 ,將使用到pickle模塊

① 存儲過程

import pickle
from openpyxl import load_workbook

# 創建類數據
wb = load_workbook('input.xlsx')
ws = wb['in_sheet']

# 將 in_sheet 復制到 out_sheet
# 注意,這里的 usr_copy_sheet() 是自定義方式,openpyxl自帶的copy_sheet()不能復制不同workbook中的worksheet
usr_copy_sheet(ws, out_ws)

# 將out_ws轉化為二進制數據
obj = pickle.dumps(out_ws)

# 將二進制數據存到本地文件,必須使用二進制寫入
with open(file='data.txt', mode='wb') as f:
    f.write(obj)

此時,ws被存儲到本地文件 data.txt,打開是二進制亂碼

② 加載過程

import pickle
from openpyxl.worksheet.worksheet import Worksheet

# 創建空的類數據準備接收數據,如果類有parent屬性,必須和要接收的數據保持一致
out_ws= Worksheet(parent=out_wb)

# 將本地文件數據加載到類數據上,必須使用二進制打開文件
with open(file='data.txt', mode='rb') as f:
    out_ws= pickle.loads(f.read())

便可以省去讀取 工作表in_sheet,復制到工作表 out_sheet等等過程

2 將Python數據存儲為程序的一部分

如果我們要求 工作表in_sheet文件的數據不但不能明文存儲,還不能作為外部文件,必須作為 程序.exe 的一部分,以防丟失。有些小程序一共只有一個 exe文件,外掛一個文件不方便,此時可使用到pickle模塊

① 存儲過程

import pickle
from openpyxl import load_workbook

# 創建類數據
wb = load_workbook('input.xlsx')
ws = wb['in_sheet']

# 將 in_sheet 復制到 out_sheet
# 注意,這里的 usr_copy_sheet() 是自定義方式,openpyxl自帶的copy_sheet()不能復制不同workbook中的worksheet
usr_copy_sheet(ws, out_ws)

# 將out_ws轉化為二進制數據
obj = pickle.dumps(out_ws)

# 將二進制數據存為py文件,必須使用文本寫入
with open(file='out_sheet.py', mode='w') as f:
    # 將二進制數據轉為 b'''xxx''' 字符串寫入 py文件
    data = 'data=' + str(obj).replace('b\'', 'b\'\'\'') + '\'\''
    f.write(data)

此時,out_ws 被存儲到本地文件out_sheet.py,內容是一串二進制碼:

data=b'''\x80\x04......'''

② 加載過程

將生成的out_sheet.py 加載到程序中,直接讀取數據

import pickle
from openpyxl.worksheet.worksheet import Worksheet
import out_sheet

# 創建空的類數據準備接收數據,如果類有parent屬性,必須和要接收的數據保持一致
out_ws= Worksheet(parent=out_wb)

# 直接讀取out_sheet.py文件中的data變量
out_ws= pickle.loads(out_sheet.data)

out_sheet.py最終會被編譯為程序的一部分

關于“Python數據序列化的pickle模塊怎么用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Python數據序列化的pickle模塊怎么用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女