[英]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.