我们希望在运行Python程序时获得并存储一些字符串、列表、词典等数据。 很长时间以后很容易使用。 此时,Pickle模块会很有用。 pickle模块及其同类模块cPickle为Python提供了pickle支持,后者将对象转换为可以传输或保存的格式。 后者使用c编码,因此可以提高性能。
pickle转换为python对象pickle模块将任何python对象转换为一个系统字节的操作称为序列化对象。
pickle模块提供了以下函数对: dumps(object )返回包含pickle格式对象的字符串。 loads (字符串)返回拾取字符串中包含的对象。
importpicklefrompprintimportpprinta=[ 1,2,[ 3,4 ],' pyth ',' pickle']pprint(a ) b=pickle.dump(a ) c 上面代码的输出如下。
[ 1,2,[ 3,4 ],‘pyth’,‘pickle’]
(b ) x80(x03 ) q ) x00 ) k…x06’b ) x00…Pickleq ) x03e.) )
[ 1,2,[ 3,4 ],‘pyth’,‘pickle’]
中间太长就省略了。 将数据结构保存到. pkl文件dump(object,file )时,对象将写入文件。 该文件可以是实际的物理文件,但也可以是具有允许单个字符串参数的write )方法的对象,如文件。 默认情况下,dumps (和dump )使用可打印的ASCII表示创建拾取。
导入pickles1=' pickle ' S2={ ' a ' : ' one '、' b':'two '、' c':'three'}s3=['faith ', 对于' hoood' fil ) pickle.dump(s2、fil、True ) pickle.dump(s2、fil、1 ) fil.close ) ) final参数(可选) True . pkl文件数据load (导入文件时,返回pickle文件中包含的对象。 loads (和load )函数自动检测拾取是二进制格式还是文本格式。
fie=open(demo.pkl ),rb ) ) T1=pickle.load ) fie ) T2=pickle.load (fie ) T3=pickle.load (fie ) print
“‘pickle”
{“a”:“one”、“b”:“two”、“c”:“three”}
[‘faith’、‘hope’、‘love’]
EOFError: Ran out of input
Python2和Python3兼容性问题Python3不支持cPickle,因此在Python3中打开存储在Python2中的pkl文件时会出现错误。 范例
fil=open('test.pkl ',' rb ' ) dat=pickle.load ) fil )会导致解码错误。
unicodedecodeerror :‘ascii’codec can’tdecodebyte…inpositionx : ordinalnotinrange (128 )。
此时,如果文件中的字符串需要使用encode编码格式,则正常读取。
dat=pickle.load (文件,编码=' iso-8859-1 ' )参考资料
百度经验python如何将数据转换为. pkl文件
新浪博客pickle和cPickle模块_努力前进
CSDN oo傻孩子oo python3使用pickle读取文件,并给出TypeError或UnicodeDecodeError的解决方案。 原文链接到链接。