繁体   English   中英

Pickle.dump 到变量

[英]Pickle.dump to variable

我是 python 的新人,我想知道这个问题是否有解决方案:

我知道这听起来很奇怪,但我想将 pickle.dump 数据保存到一个变量中。 我开始认为我可以通过制作一个假的 class 来绕过它,而不是写入一个文件,写入一个变量:

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()

没有任何错误显示,但 output 只是一个“.”

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

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

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

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

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

如果您需要,以下是使用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()

希望能帮助到你!

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

将此类添加到您的代码中

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

Farhan K 的 stackoverlfow 上找到了一个快速清晰的解释:

import pickle

mydict = { 'a': 1111, 'b': 2222 }
string_of_bytes_obj = str(pickle.dumps(mydict), encoding="latin1")

unpickled_dict = pickle.loads(bytes(string_of_bytes_obj, "latin1"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM