Python3 unpickle 字节对象的字符串表示

标签 python python-3.x pickle

是否有一种好方法来加载表示为字符串的字节对象,以便可以对其进行 unpickled?

基本示例

这是一个愚蠢的例子:

import pickle

mydict = { 'a': 1111, 'b': 2222 }
string_of_bytes_obj = str(pickle.dumps(mydict)) # Deliberate string representation for this quick example.

unpickled_dict = pickle.loads(string_of_bytes_obj) # ERROR!  Loads takes bytes-like object and not string.

尝试解决方案

一个解决方案当然是eval字符串:

unpickled_dict = pickle.loads(eval(string_of_bytes_obj))

但是,eval 似乎是错误的,尤其是当字符串可能来自网络或来自文件时。

...

对更好的解决方案有什么建议吗?

谢谢!

最佳答案

出于安全考虑,您可以使用 ast.literal_eval而不是 eval:

>>> import ast
>>> pickle.loads(ast.literal_eval(string_of_bytes_obj))
{'b': 2222, 'a': 1111}

关于Python3 unpickle 字节对象的字符串表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52890916/

相关文章:

python - 如何保存 LibSVM python 对象实例?

Python Pandas to_pickle 无法 pickle 大型数据帧

python - 在python中将字节转换为位

python - 在 csv 文件中打印多行输出

python - 从单个长行中提取特定字符串

python - 生成器和函数

python - 如何使用/从命名空间中获取列表元素?

python - 与 sys.getsizeof() 的结果相比,整数的大内存占用

python - 使用 pickle 将巨大的二元字典保存到文件中

Python Django 搜索中的多个属性