Pickle.dump变量

时间:2014-05-25 15:03:31

标签: 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

然后:

pick = PickleDatatoVar()
pickle.dump(Int, pick)
var = pick.get()

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

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

3 个答案:

答案 0 :(得分:7)

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

但是,更简单的方法是使用io.BytesIO()直接转储到字符串对象。

引擎pickle.dumps()为您做的是创建一个内存中的文件对象,将pickle数据写入它并为您检索字符串结果;请参阅pickle.dumps()

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

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

答案 1 :(得分:1)

如果需要,以下是使用pickle.dump()的代码段:

从pickle_obj转储到字节/字符串变量

bytes_output = BytesIO()
pickle.dump(pickle_obj, model_bytes)
bytes_output_base64 = base64.b64encode(model_bytes.getvalue()).decode() # convert the bytes to base64 string
bytes_output.close()

从pickle_data中的base64字符串加载到pickle_obj

pickle_bytes = BytesIO(base64.b64decode(pickle_data))
pickle_obj = pickle.loads(pickle_bytes.read())
pickle_bytes.close()

希望有帮助!

答案 2 :(得分:1)

我知道为时已晚,但我遇到了同样的问题,这是我想出的解决方案。我为我的英语不好而道歉

将此类添加到您的代码中

class DataPacket:
    def __init__(self):
        pass

    def write(self, string):
        self._string = string

    @property
    def string(self):
        return self._string

在你倾倒腌制结果的地方使用这个

    PickeledString = DataPacket()
    pickle.dump(dataJSON, PickeledString)

阅读它使用这个

PickeledString.string