python - 如何找出/打印使用哪个版本的协议(protocol)生成了 pickle 文件

标签 python pickle

在某些情况下,当我加载一个现有的 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/

相关文章:

python - 从文本行列表中查找字符串

python - 用于Docker集成的通用Python对象序列化

python - pickle .load : ImportError: No module named k_means_

Python 通过 http 发送数据

python - 在 Python/Django 中从城市获取时区

python - Tensorflow Mac GPU pywrap_tensorflow 在受限程序中被忽略

python - 使用elasticsearch-dsl的delete方法时版本冲突

python - Django Restful Framework 模型序列化器 get_validation_exclusions

python - cPickle.UnpicklingError : pickle data was truncated

Python 多处理 apply_async 不可pickle?