我是 python 的新手,我想知道是否有解决这个问题的方法:
我知道这听起来很奇怪,但我想将 pickle.dump 数据保存到一个变量中。 我开始认为我可以通过制作一个假类来绕过它,而不是写在文件中,写在变量中:
class PickleDatatoVar(object):
def __init__(self):
self.data = None
def write(self, data):
self.data = data
def get(self):
return self.data
然后:
pick = PickleDatatoVar()
pickle.dump(Int, pick)
var = pick.get()
没有任何错误显示,但输出只是一个“.”
那么有没有解决方案,而不是将其保存在保存到变量的文件中?
最佳答案
您正在寻找内存中的文件对象;在 Python 2 中是 cStringIO.StringIO()
, 对于 Python 3 io.BytesIO()
;这些就像文件对象一样,你可以让 pickle.dump()
写入这些。
但是,更简单的方法是使用 pickle.dumps()
而是直接转储到字符串对象。
在幕后,pickle.dumps()
为您做的是创建一个内存中文件对象,将 pickle 数据写入其中并检索字符串结果为你;查看source code :
def _dumps(obj, protocol=None, *, fix_imports=True):
f = io.BytesIO()
_Pickler(f, protocol, fix_imports=fix_imports).dump(obj)
res = f.getvalue()
assert isinstance(res, bytes_types)
return res
但这样您就不必自己做那些额外的工作了。
关于python - Pickle.dump 到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23856656/