Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 压缩pkl文件_Python_Encoding_Base64_Pickle - Fatal编程技术网

Python 压缩pkl文件

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文件转换为base64字符串格式,以便返回包含此字符串和其他内容的json文件

{                                                                       
    '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包含一个dictionary
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\u model
模块,这将起作用

问题似乎不在base64转换中,而是在第二行的
load
函数中。你从哪里弄来的?我认为问题可能与它所使用的某个类型或类有关,但您在中使用
load
的环境不知道该类型或类。
with open(DIR_PATH + 'd885d7a4bbb742cbb397c2642339e950.pkl', 'rb') as f:
    serialized_str = base64.b64encode(f.read())
    print serialized_str