簡體   English   中英

壓縮pkl文件

[英]Compressing a pkl file

我的要求是將pkl文件轉換為base64字符串格式,以便我可以返回包含此字符串以及其他一些內容的json文件。

{                                                                       
    'pkl_file': 'pkl_as_base64_string'                                             
    'content1': 'content1_as_base64_string'
    'content2': 'content2_as_base64_string'                                 
                     .                                                         
                     .                                                   
}

現在我已經嘗試使用https://stackoverflow.com/a/26349372/9316658作為參考的代碼

with open(DIR_PATH + 'd885d7a4bbb742cbb397c2642339e950.pkl', 'rb') as f:
    data = pickle.load(f)
    serialized_str = base64.b64encode(pickle.dumps(data))
    print serialized_str

我執行上面的代碼時得到這個

Traceback (most recent call last):
File "/home/bhargav/PycharmProjects/Test/export_import.py", line 8, in <module>
    data = pickle.load(f)
ImportError: No module named ml.model.project_model

當我使用文本編輯器打開pkl文件時,這些是前幾行

(iml.model.project_model
ProjectModel
p0
(dp1
S'project_predict_pipe'
p2
(iml.pipeline.base
ICVPipeline
p3
(dp4
S'processors'
p5
(lp6
(iml.pi.file.pdf_to_img_pi
PdfFileConvertPI
p7
(dp8
S'process'
p9
Nsba(iml.pi.ocr.file_ocr_pi

我不確定為什么python會將pkl文件中的文本解釋為python命令(我是python編程的新手,以前從未處理過pkl文件)。 另外,pkl文件的大小非常大(1.2 GB)。 如何以最有效的方式實現pkl到bas64的轉換? 任何幫助表示贊賞。 TIA

問題可能與pkl使用您的環境中未知的類型/類有關。 如果編寫了此文件,則只需導入/聲明缺少的類型(可能是ml.model.project_model )。

無論如何-您試圖做的是將pkl中的對象轉換為base 64,而不是您所說的文件本身(意思是-不使用pkl本身)。 例如,如果pkl包含字典d ,則您試圖使的base64為d 但是b64encode應該接收一個字符串或緩沖區,因此它將不起作用。

所以,我認為您真正想要做的是將d轉儲到pkl文件(這是您已經擁有的文件)中,並將文件的內容轉換為base64。 為此,您不需要使用dump ,只需-

with open(DIR_PATH + 'd885d7a4bbb742cbb397c2642339e950.pkl', 'rb') as f:
    serialized_str = base64.b64encode(f.read())
    print serialized_str

然后,另一端將需要打開base64(使用b64decode ),將其寫入文件,然后使用pickle.load()打開此文件以獲取原始對象(在我的示例d )。 假設他已經聲明了ml.model.project_model模塊,這將起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM