Python3 unpickle 字节对象的字符串表示 [英] Python3 unpickle a string representation of bytes object
本文介绍了Python3 unpickle 字节对象的字符串表示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否有一种好方法可以加载表示为字符串的 bytes 对象,以便对其进行 unpickled?
基本示例
这是一个愚蠢的例子:
进口泡菜mydict = { 'a': 1111, 'b': 2222 }string_of_bytes_obj = str(pickle.dumps(mydict)) # 这个快速示例的特意字符串表示.unpickled_dict = pickle.loads(string_of_bytes_obj) # 错误!Loads 接受类似字节的对象而不是字符串.
尝试解决方案
一种解决方案当然是eval
字符串:
unpickled_dict = pickle.loads(eval(string_of_bytes_obj))
但是,eval
似乎是错误的,尤其是当字符串可能来自网络或来自文件时.
...
对更好的解决方案有什么建议吗?
谢谢!
解决方案
出于安全考虑,您可以使用 ast.literal_eval
而不是 eval
:
Is there a good way to load a bytes object that is represented as a string, so it can be unpickled?
Basic Example
Here is a dumb example:
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.
Attempt at a Solution
One solution is of course to eval
the string:
unpickled_dict = pickle.loads(eval(string_of_bytes_obj))
But, seems wrong to eval
, especially when the strings might be coming over a network or from a file.
...
Any suggestions for a better solution?
Thanks!
解决方案
For a safety concern you can use ast.literal_eval
instead of eval
:
>>> import ast
>>> pickle.loads(ast.literal_eval(string_of_bytes_obj))
{'b': 2222, 'a': 1111}
这篇关于Python3 unpickle 字节对象的字符串表示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文