Python 压缩pkl文件
我的要求是将pkl文件转换为base64字符串格式,以便返回包含此字符串和其他内容的json文件Python 压缩pkl文件,python,encoding,base64,pickle,Python,Encoding,Base64,Pickle,我的要求是将pkl文件转换为base64字符串格式,以便返回包含此字符串和其他内容的json文件 { 'pkl_file': 'pkl_as_base64_string' 'content1': 'content1_as_base64_string'
{
'pkl_file': 'pkl_as_base64_string'
'content1': 'content1_as_base64_string'
'content2': 'content2_as_base64_string'
.
.
}
现在我已经试用了这个代码作为参考
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
我不知道为什么python会将pkl文件中的文本解释为python命令(我是python编程新手,以前从未处理过pkl文件)。此外,pkl文件的大小非常大(1.2GB)。如何以最有效的方式实现pkl到bas64的转换?感谢您的帮助。TIA问题可能与pkl使用环境中未知的类型/类有关。如果编写了此文件,只需导入/声明缺少的类型(可能是
ml.model.project\u model
)
无论如何,您要做的是将pkl中的对象转换为base 64,而不是您所说的文件本身(意思是-不使用pkl本身)。例如,如果pkl包含一个dictionaryd
,则您试图将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\u model
模块,这将起作用 问题似乎不在base64转换中,而是在第二行的load
函数中。你从哪里弄来的?我认为问题可能与它所使用的某个类型或类有关,但您在中使用load
的环境不知道该类型或类。
with open(DIR_PATH + 'd885d7a4bbb742cbb397c2642339e950.pkl', 'rb') as f:
serialized_str = base64.b64encode(f.read())
print serialized_str