序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。
python中的pickle模块实现了基本的数据序列化和反序列化。
通过pickle模块的序列化操作能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,能够从文件中创建上一次程序保存的对象。
pickle模块使用的数据格式是python专用的,能够把python对象直接保存到文件,而不需要转化为字符串,也不用底层的文件访问操作把它们写入到一个二进制文件中。
函数的功能:将obj对象序列化存入已经打开的file中。
参数:
obj:想要序列化的obj对象。
file:文件名称。
protocol:序列化使用的协议。如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- import pickle
-
-
- # 将test对象序列化到文件中
- def dump_test_data():
- test = [1, 2, 3]
- with open("test.pickle", "wb") as file:
- pickle.dump(test, file)
函数的功能:将file中的对象序列化读出。
参数:
file:文件名称。
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- import pickle
-
-
- # 将文件中test对象序列化读出
- def load_test_data():
- with open("test.pickle", "rb") as file:
- test = pickle.load(file)
- return test
函数的功能:将obj对象序列化为string形式,而不是存入文件中。
参数:
obj:想要序列化的obj对象。
protocal:如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- import pickle
-
-
- # 将test对象序列化为字符串形式
- def dumps_test_data():
- test = [1, 2, 3]
- # dumps 将数据通过特殊的形式转换为仅python语言识别的字符串
- str_test = pickle.dumps(test)
- print(str_test)
函数的功能:从string中读出序列化前的obj对象。
参数:
string:文件名称。
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- import pickle
-
-
- # 从string中读出序列化前的对象
- def loads_test_data():
- test = [1, 2, 3]
- str_test = pickle.dumps(test)
- # loads 将pickle数据转化为python的数据结构
- loads_test = pickle.loads(str_test)
- print(loads_test)