python 中的pickle 使用注意事项

介绍

如何让pickle 兼容python2 和python3

当python版本为python 3的时候 保存为protocal=2 就可以兼容python2 了。

1
2
3
f = open('TemInfo_py3_pro2_dict.pkl', 'wb')
pickle.dump(templates, f ,protocol=2)
f.close()

pickle 保存的数据类型

尽量不要包含自己定义的类,否则兼容性很麻烦同时python2 保存速度最慢。

因为pickle的创建最初目的就是保存数据。如果类中的仅仅包含数据,可以把类转换成字典。
或者仅仅需要类中的数据,可以类转换成字典的格式。

这样就可以避免各种奇怪的错误,
AttributeError: ‘module’ object has no attribute ‘Class Name’

如果坚持保存为定义的class的话,可以参看这篇文章
这篇文章

python

存储97万条字典数据,含多个字典索引的时候 python3 明显快于Python2。
同一台电脑上测试同一个脚本
时间计算:
PYTHON3 it take 36.402302503585815 seconds
PYTHON2 it take 4+ hour