Python pickle模块
python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
Pickle模块中最常用的函数为: dump、dumps、load、loads
(1)pickle.dump(obj, file, [,protocol])
函数的功能:将obj对象序列化存入已经打开的file中。
参数讲解:
obj:想要序列化的obj对象。
file:文件名称,是一个带有写权限的文件对象,如果protocol>=1, file需要以二进制(wb)形式操作。
protocol:序列化使用的协议。如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。
(2)pickle.load(file)
函数的功能:将file中的对象序列化读出。
参数讲解:
file:文件名称,是一个带有读权限的文件对象,如果protocol>=1, file需要以二进制(rb)形式操作
(3)pickle.dumps(obj[, protocol])
函数的功能:将obj对象序列化为string形式,而不是存入文件中。
参数讲解:
obj:想要序列化的obj对象。
protocal:如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。
(4)pickle.loads(string)
函数的功能:从string中读出序列化前的obj对象。
参数讲解:
string:文件名称。
【注】 dump() 与 load() 相比 dumps() 和 loads() 还有另一种能力:dump()函数能一个接着一个地将几个对象序列化存储到同一个文件中,随后调用load()来以同样的顺序反序列化读出这些对象。
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/12/26 0026 15:18 # @Author : ming __author__ = 'ming' # pickle模块主要函数的应用举例 import pickle DataList = [ ["yang", 20, '6873264382'], ["ming", 32, '7298349832'], ["coke", 14, '2937972439'], ] DataDic = { "A": [1, 2, 3, 4, ], "B": ('hello', 'world',), "C": {'my': 'yes', 'you': 'no'} } # 使用dump()将数据序列化到文件中 fo = open('File.txt', 'wb') pickle.dump(DataList, fo, -1) pickle.dump(DataDic, fo) fo.close() # 使用load()将数据从文件中序列化读出 fo = open('File.txt', 'rb') data1 = pickle.load(fo) print(data1) data2 = pickle.load(fo) print(data2) fo.close() # 使用dumps()和loads()举例 p = pickle.dumps(DataList) print(pickle.loads(p)) p = pickle.dumps(DataDic) print(pickle.loads(p))
[['yang', 20, '6873264382'], ['ming', 32, '7298349832'], ['coke', 14, '2937972439']] {'A': [1, 2, 3, 4], 'C': {'my': 'yes', 'you': 'no'}, 'B': ('hello', 'world')} [['yang', 20, '6873264382'], ['ming', 32, '7298349832'], ['coke', 14, '2937972439']] {'A': [1, 2, 3, 4], 'C': {'my': 'yes', 'you': 'no'}, 'B': ('hello', 'world')}