python - Pickle.dump 到变量

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

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

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

最佳答案

您正在寻找内存中的文件对象;在 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/

相关文章:

python - 正则表达式:当字符串包含正则表达式模式的一部分时匹配字符串的一部分

python - Python和文本文件中的Pickle模块

python - 使用 Python 3.5 和 Anaconda 找不到模块 cPickle

python - 装饰器在它装饰的函数被调用之前运行?

python - 我可以在运行 'make' 命令时为 sip-4.18.1 指定 Python.h 的路径吗?

python - 工作人员死亡后重新启动组中的长期任务

python - PyMongo 连接被拒绝

python - pickle 加载错误 "__init__() takes exactly 2 arguments (1 given)"

python multiprocessing 无法 pickle <type 'function' >

Java .dat 文件到 Python pickle