【发布时间】:2018-10-19 10:51:15
【问题描述】:
有没有一种好方法可以加载表示为字符串的字节对象,以便可以取消它?
基本示例
这是一个愚蠢的例子:
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 似乎是错误的,尤其是当字符串可能来自网络或来自文件时。
...
对更好的解决方案有什么建议吗?
谢谢!
【问题讨论】:
-
我认为最好不要将字节转换为str。有什么办法可以避免这种转换?
-
@soon 我只是在处理来自其他人的文件...肯定会更好地将他们的文件更改为使用二进制数据...但是现在,我无法避免字符串转换.
-
将pickle与网络数据一起使用不是一个好主意顺便说一句:zopatista.com/plone/2007/11/09/one-cookie-please
-
你知道文件的编码是什么吗?如果你这样做了,那么你只需要
str.encode解开字符串。如果你不知道,你需要先猜测编码。 -
@JacquesGaudin 不确定我是否理解。字符串的编码是什么?我知道该文件是 utf-8,但我认为给我的只是一种以已知编码获取字符串表示形式的方法,我仍然需要评估......或者你的意思是像@提供的答案Farhan.K?
标签: python python-3.x pickle