1.1 持久化模块
pickle模块是Python专用的持久化模块,所谓的持久化就是让数据持久化保存,可以持久化包括自定义类在内的各种数据,比较适合Python本身复杂数据的存储。但是持久化后的字符串是只能用于Python环境,不能用作与其他语言进行数据交换。pickle的本意是腌渍的意思,就是将物品永久地保存成文件,用的时候读出来还能用。
1.2 pickle模块的作用
pickle模块的作用是把Python对象直接保存到文件里,而不需要先把它们转化为字符串再保存,也不需要用底层的文件访问操作,直接把它们写入一个二进制文件里。pickle模块会创建一个Python语言专用的二进制格式,不需要使用者考虑任何文件细节,它会帮你完成读写对象的操作。用pickle比打开文件、转换数据格式以及写入文件的操作能够节省不少代码。
pickle本身和json的功能是相同的,都是将Python数据对象保存为持久化的文件,区别是pickle能够保存Python的复杂的数据类型,包括列表、元组、自定义类等,而json只能保存字典类型的数据,同时pickle是能用Python打开,而json却可以被其他语言所读取。
1.3 使用方法
在pickle中dumps()和loads()操作的类型是bytes类型,而在使用dumpy()和load()读写文件时,要使用rb或wb模式(二进制),也就是只接收bytes类型的数据。pickle的转化形式与json相同:
1.4、pickle模块常用函数
(1)pickle.dump(obj, file, [,protocol])
函数的功能:将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)
(2)pickle.load(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
(3)pickle.dumps(obj[, protocol])
函数的功能:将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)
(4)pickle.loads(string)
函数的功能:从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)
转载自:https://blog.csdn.net/kevinjin2011/article/details/125525373
标签:obj,python,file,test,序列化,pickle From: https://www.cnblogs.com/shaoyishi/p/17245380.html