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

Python數(shù)據(jù)序列化之pickle模塊

 更新時間:2022年03月06日 08:48:51   作者:一ye殘雪  
這篇文章主要介紹了Python數(shù)據(jù)序列化之pickle模塊,pickle的本質(zhì)是將Python數(shù)據(jù)還原為內(nèi)存中的二進(jìn)制數(shù)據(jù),供用戶轉(zhuǎn)移、儲存,更多詳細(xì)內(nèi)容,需要的小伙伴可以下面文章內(nèi)容

前言:

在英語中 pickle 名詞是泡菜,動詞是腌漬的意思。可以理解為把東西腌起來保存成文件,要用的時候讀出來洗洗再用。

pythonpickle模塊實(shí)現(xiàn)了基本的數(shù)據(jù)序列化和反序列化。

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

pickle的本質(zhì)是將Python數(shù)據(jù)還原為內(nèi)存中的二進(jìn)制數(shù)據(jù),供用戶轉(zhuǎn)移、儲存。

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

  • 將Python的數(shù)據(jù)保存為磁盤上的二進(jìn)制文件,需要時讀取還原為Python數(shù)據(jù),可以是可打印的基本數(shù)據(jù)(字符串、列表、字典等等),也可以是不可打印的類數(shù)據(jù)。相比之下,使用Json方式只能保存可打印的基本數(shù)據(jù)
  • 將已經(jīng)創(chuàng)建好的類數(shù)據(jù)字符串化,保存為一個變量。在程序下次運(yùn)行時直接讀取變量還原為類數(shù)據(jù),省去類數(shù)據(jù)的創(chuàng)建過程

1 將Python數(shù)據(jù)存儲為本地文件

設(shè)計一個程序,輸出產(chǎn)物是Excel工作簿output.xlsx,工作簿中有一個工作表out_sheet 是從 標(biāo)準(zhǔn)文檔input.xlsx中的 in_sheet 中復(fù)制而來。

工作表in_sheet 的內(nèi)容很龐大,難以用手動重現(xiàn),通常我們會選擇將 標(biāo)準(zhǔn)文檔 input.xlsx 作為程序的引用素材放在工程里。程序運(yùn)行過程中將工作表 in_sheet復(fù)制到工作表out_sheet中。

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

① 存儲過程

import pickle
from openpyxl import load_workbook

# 創(chuàng)建類數(shù)據(jù)
wb = load_workbook('input.xlsx')
ws = wb['in_sheet']

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

# 將out_ws轉(zhuǎn)化為二進(jìn)制數(shù)據(jù)
obj = pickle.dumps(out_ws)

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

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

② 加載過程

import pickle
from openpyxl.worksheet.worksheet import Worksheet

# 創(chuàng)建空的類數(shù)據(jù)準(zhǔn)備接收數(shù)據(jù),如果類有parent屬性,必須和要接收的數(shù)據(jù)保持一致
out_ws= Worksheet(parent=out_wb)

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

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

2 將Python數(shù)據(jù)存儲為程序的一部分

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

① 存儲過程

import pickle
from openpyxl import load_workbook

# 創(chuàng)建類數(shù)據(jù)
wb = load_workbook('input.xlsx')
ws = wb['in_sheet']

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

# 將out_ws轉(zhuǎn)化為二進(jìn)制數(shù)據(jù)
obj = pickle.dumps(out_ws)

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

此時,out_ws 被存儲到本地文件out_sheet.py,內(nèi)容是一串二進(jìn)制碼:

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

② 加載過程

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

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

# 創(chuàng)建空的類數(shù)據(jù)準(zhǔn)備接收數(shù)據(jù),如果類有parent屬性,必須和要接收的數(shù)據(jù)保持一致
out_ws= Worksheet(parent=out_wb)

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

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

到此這篇關(guān)于Python數(shù)據(jù)序列化之pickle模塊的文章就介紹到這了,更多相關(guān)Python中的pickle模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

濉溪县| 山阳县| 廉江市| 武山县| 林甸县| 阿合奇县| 枞阳县| 东乡| 思茅市| 沅陵县| 江津市| 桃源县| 澄江县| 搜索| 湖南省| 大邑县| 科尔| 邳州市| 顺义区| 吐鲁番市| 德钦县| 彰化市| 高雄县| 资阳市| 神农架林区| 沭阳县| 紫云| 岱山县| 鄂尔多斯市| 陈巴尔虎旗| 巴马| 赤水市| 平湖市| 安西县| 万载县| 穆棱市| 茶陵县| 孟连| 大英县| 康乐县| 全南县|