Как узнать / распечатать с какой версией протокола был создан файл рассола - PullRequest
0 голосов
/ 22 ноября 2018

В некоторых случаях, когда я загружаю существующий файл pickle, а после этого снова создаю дамп, размер почти уменьшается вдвое.

Интересно, почему, и первым подозреваемым является версия протокола.Можно ли как-то узнать, с какой версией протокола файл был засечен?

1 Ответ

0 голосов
/ 22 ноября 2018

Возможно, есть более элегантный способ, но чтобы перейти к металлу, вы можете использовать pickletools:

import pickle
import pickletools
s = pickle.dumps('Test')
proto_op = next(pickletools.genops(s))
assert proto_op[0].name == 'PROTO'
proto_ver = proto_op[1]

Чтобы выяснить версию, необходимую для его декодирования, вам потребуется максимальный протоколверсия каждого кода операции:

proto_ver = max(op[0].proto for op in pickletools.genops(s))
...