我的要求是将 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 的转换?任何帮助,不胜感激。蒂亚
该问题可能与 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
模块,这将起作用。