Python中的pickle模块简单介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jerry_1126/article/details/83548780

使用eval可以把字符串转换成对象,它是一个功能强大的工具。比如:

>>> eval("1+1")                   # 将字符对象直接运算,得出运算结果
2
>>> eval("[1, 2, 3]")             # 将字符串对象转变成列表对象
[1, 2, 3]
>>> eval("{'a': 1, 'b': 2}\n")    # 将字符串对象转换成字典对象,并去除\n换行符
{'a': 1, 'b': 2}
>>>

但事实上,eval太强大,传给它的字符串的对象都会执行, 甚至会删除计算机上所有文件的表达式,只要权限够,它都会屁颠屁颠的去执行,比如说下面字符串对象:

>>> import os                             # 导入os模块
>>> eval("os.system('sudo rm -rf /*')")   # 删除计算机里面的所有文件   

如果想储存Python原生对象,但又无法信赖文件的数据来源,Python中的pickle模块是个理想的选择。pickle模块是能够让我们直接在文件中存储几乎任何Python对象的高级工具,也并不需要我们把字符串转换来转换去。是非常通用的数据格式化和解析工具。

  • 使用pickle.dump来存储数据

>>> import pickle
>>> D = {'A': 1, 'B': 2}
>>> F = open("data.pkl", "wb")     # 要存储到的具体文件名,打开类型为'wb'
>>> pickle.dump(D, F)              # 使用dump方法存储文件
>>> F.close()
  • 使用pickle.load来提取数据

>>> import pickle
>>> F = open("data.pkl", "rb")    # 打开数据文件,具体类型'rb'
>>> E = pickle.load(F)            # 使用load方法来导出数据
>>> E
{'A': 1, 'B': 2}
>>>

猜你喜欢

转载自blog.csdn.net/Jerry_1126/article/details/83548780