将Pickle.dump输出到变量
我刚开始学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()
没有出现错误,但输出的结果只是一个'.'
所以,有没有办法把数据保存到变量里,而不是保存到文件中呢?
4 个回答
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
2
我在StackOverflow上找到了Farhan K写的一个简单明了的解释,内容可以在这里查看:
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"))
3
这里有一些代码片段,使用了 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()
从一个 base64 字符串(在 pickle_data 中)加载到 pickle_obj
pickle_bytes = BytesIO(base64.b64decode(pickle_data))
pickle_obj = pickle.loads(pickle_bytes.read())
pickle_bytes.close()
希望这些对你有帮助!
17
你想要一个内存中的文件对象。在Python 2中,这个对象是cStringIO.StringIO()
,而在Python 3中则是io.BytesIO()
。它们的作用和文件对象一样,你可以用pickle.dump()
把数据写入这些对象。
不过,更简单的方法是直接使用pickle.dumps()
,这样可以直接把数据保存为一个字符串对象。
从底层来看,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
这样你就不需要自己做那些额外的工作了。