在某些情况下,当我加载一个现有的 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]
Run Code Online (Sandbox Code Playgroud)
要确定解码所需的版本,您需要每个操作码的最大协议版本:
proto_ver = max(op[0].proto for op in pickletools.genops(s))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1436 次 |
| 最近记录: |