声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!

在上一篇文章中我们提到,使用eval可以把字符串转换成对象。eval是一个功能强大的工具,但是它有时太过于强大了。使用eval可以执行Python的任何表达式,甚至是有可能会删除计算机上所有文件的表达式。所以,如果你想储存Python对象,但又无法信赖要被存储的数据的来源,那么Python标准库pickle模块将是一个理想的选择。

pickle模块是一个能够让我们直接往文件中存储几乎任何Python对象的高级工具,它不要求我们把字符串转换来转换去。它就像是一个超级通用的数据格式化和解析工具。如下例所示,如果想要在文件中储存字典,就可以直接用pickle。

>>> D = {'a': 1,'b': 2}

>>> F = open('datafile.pkl','wb')

>>> import pickle

>>> pickle.dump(D,F) # Pickle any object to file

>>> F.close()

将来想要取回字典时,只要简单地再用一次pickle进行重建就可以了:

>>> F = open('datafile.pkl','rb')

>>> E = pickle.load(F) # Load any object from file

>>> E

{'a': 1,'b': 2}

pickle模块内部会执行所谓的对象序列化(object serialization),也就是进行对象和字节字符串之间的相互转换。在上例中,pickle内部将字典转成了字符串形式,下面我们将pickle编码的字符串赤裸裸的打印了出来:

>>> open('datafile.pkl','rb').read()  # Format is prone to change!

b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02u.'

上面的编码字符串我们看不懂,但是pickle能够依靠这些字符串来重建字典对象。