Pickle.dump变量

use*_*887 4 python pickle

我是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
Run Code Online (Sandbox Code Playgroud)

然后:

pick = PickleDatatoVar()
pickle.dump(Int, pick)
var = pick.get()
Run Code Online (Sandbox Code Playgroud)

没有任何内容显示为错误,但输出只是一个'.'

那么有没有一种解决方案而不是将其保存在保存为变量的文件中?

Mar*_*ers 11

您正在寻找内存中的文件对象; 在Python 2中cStringIO.StringIO(),对于Python 3 io.BytesIO(); 这些行为就像文件对象一样,你可以pickle.dump()写这些.

但是,更简单的路径是使用pickle.dumps()直接转储到字符串对象.

在幕后,pickle.dumps()您可以创建一个内存中的文件对象,将pickle数据写入它并为您检索字符串结果; 看到源代码:

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
Run Code Online (Sandbox Code Playgroud)

但这样你就不必自己做额外的工作了.