- pickle模块实现了数据序列和反序列化。
- pickle模块使用的数据格式是python专用的,能够把Python对象直接保存到文件,而不须要把他们转化为字符串,也不用底层的文件访问操作把它们写入到一个二进制文件中。
1. pickle.dump(obj, file, [,protocol])
函数的功能:接受一个文件句柄和一个数据对象作为參数,把数据对象obj以特定的格式保存到给定的文件file里。
参数:
- obj:想要序列化的obj对象。
- file:文件名称。
- protocol:序列化使用的协议。如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。
示例代码:
import pickle
# 序列号文件
obj = 123, 'xyz', '您好', ['aaa', 'bbb'], {"key": "value", "key1": "value1"}, {123, 456}
print(obj)
# 写入文件
# f = open("./pickle.txt", 'w') # TypeError: write() argument must be str, not bytes
f = open("./pickle.txt", 'wb') # TypeError: write() argument must be str, not bytes
pickle.dump(obj, f)
f.close()
运行结果:
示例代码2: 【循环多次写入文件】
import pickle
# 循环多次写入文件
f = open("./pickle.txt", 'ab') # TypeError: write() argument must be str, not bytes
for i in range(5):
# 序列号文件
obj = i, 'xyz', '您好', ['aaa', 'bbb'], {"key": "value", "key1": "value1"}, {123, 456}
print(obj)
pickle.dump(obj, f)
f.close()
运行结果:
2.pickle.load(file)
函数的功能:将file中的对象序列化读出。
参数:
- file:文件名称。
示例代码:
import pickle
# 读取文件
# f = open("./pickle.txt", "r") # UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 0: illegal multibyte sequence
f = open("./pickle.txt", "rb")
data = pickle.load(f)
print(data)
f.close()
运行结果:
示例代码2:【循环多次读取文件】
import pickle
# 读取文件
f = open("./pickle.txt", "rb")
for i in range(3):
data = pickle.load(f)
print(data)
f.close()
运行结果:
注意:当多次使用pickle.dump()写入时,使用pickle.load()一次只能读取一次写入的内容。
3.pickle.dumps(obj[, protocol])
函数的功能:将obj对象序列化为string形式,而不是存入文件中。
参数:
- obj:想要序列化的obj对象。
- protocal:如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。
示例代码:
import pickle
# 序列号文件
obj = 123, 'xyz', '您好', ['aaa', 'bbb'], {"key": "value", "key1": "value1"}, {123, 456}
print(obj)
s = pickle.dumps(obj)
print(s)
运行结果:
4.pickle.loads(string)
函数的功能:从string中读出序列化前的obj对象。
参数:
- string:文件名称。
示例代码:
import pickle
# 序列号文件
obj = 123, 'xyz', '您好', ['aaa', 'bbb'], {"key": "value", "key1": "value1"}, {123, 456}
print(obj)
# dumps
s = pickle.dumps(obj)
print(s)
# loads
res = pickle.loads(s)
print(res)
运行结果: