Python Pickle有非法的字符/序列我可以用作分隔符吗?

Lif*_*fto 8 python pickle

我想制作(和解码)由几个python泡菜组成的单个字符串.

是否有一个字符或序列可以安全地用作此字符串中的分隔符?

我应该能够像这样制作字符串:

s = pickle.dumps(o1) + PICKLE_SEPARATOR + pickle.dumps(o2) + PICKLE_SEPARATOR + pickle.dumps(o3) ...
Run Code Online (Sandbox Code Playgroud)

我应该能够获取此字符串并重建对象,如下所示:

[pickle.loads(s) for s in input.split(PICKLE_SEPARATOR)]
Run Code Online (Sandbox Code Playgroud)

PICKLE_SEPARATOR应该是什么?


对于好奇,我想使用APPEND将pickled对象发送到redis.(虽然也许我会使用RPUSH)

Joh*_*ooy 8

将pickle连在一起是很好的,Python知道每个结束的地方

>>> import cStringIO as stringio
>>> import cPickle as pickle
>>> o1 = {}
>>> o2 = []
>>> o3 = ()
>>> p = pickle.dumps(o1)+pickle.dumps(o2)+pickle.dumps(o3)
>>> s = stringio.StringIO(p)
>>> pickle.load(s)
{}
>>> pickle.load(s)
[]
>>> pickle.load(s)
()
Run Code Online (Sandbox Code Playgroud)

  • 一个潜在的问题:这不适用于字符串,只适用于文件类对象:尝试`pickle.load(s)`三次,只返回`dict`. (2认同)

Pau*_*lan -1

一种解决方案是在泡菜字符串前面添加有关每个组成元素包含多少个字符的数据。