我的要求是将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
答案 0 :(得分:1)
该问题可能与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
模块,这将起作用。