Модуль pickletools имеет функцию dis , которая показывает коды операций. Он показывает, что существует код операции STOP, который вы можете сканировать:
>>> import pickle, pickletools, StringIO
>>> s = StringIO.StringIO()
>>> pickle.dump('abc', s)
>>> p = s.getvalue()
>>> pickletools.dis(p)
0: S STRING 'abc'
7: p PUT 0
10: . STOP
highest protocol among opcodes = 0
Обратите внимание, что использование кода операции STOP немного сложнее, потому что коды имеют переменную длину, но это может послужить полезной подсказкой о том, где находятся отсечки.
Если вы контролируете шаг травления на другом конце, то вы можете улучшить ситуацию, добавив свой собственный однозначный альтернативный разделитель:
>>> sep = '\xDE\xAD\xBE\xEF'
>>> s = StringIO.StringIO()
>>> pickle.dump('abc', s)
>>> s.write(sep)
>>> pickle.dump([10, 20], s)
>>> s.write(sep)
>>> pickle.dump('def', s)
>>> s.write(sep)
>>> pickle.dump([30, 40], s)
>>> p = s.getvalue()
Перед распаковкой разделить на отдельные соленья с помощью известного сепаратора:
>>> for pick in p.split(sep):
print pickle.loads(pick)
abc
[10, 20]
def
[30, 40]