在某些情况下,当我加载一个现有的 pickle 文件,然后再次转储它时,大小几乎减半。
我不知道为什么,第一个怀疑是协议(protocol)版本。 我能以某种方式找出文件是用哪个协议(protocol)版本 pickle 的吗?
最佳答案
可能有更优雅的方法,但要深入了解金属,您可以使用 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]
要找出解码所需的版本,您需要每个操作码的最大协议(protocol)版本:
proto_ver = max(op[0].proto for op in pickletools.genops(s))
关于python - 如何找出/打印使用哪个版本的协议(protocol)生成了 pickle 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53431125/