Python标准库:pickle,,pickle模块实现
Python标准库:pickle,,pickle模块实现
pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议。
序列化目的: 1、以某种存储形式使自定义对象持久化;
2、将对象从一个地方传递到另一个地方;
3、使程序更具维护性。
pickle.dump(obj,file[,protocol])
obj:序列化对象,上面的例子中是一个列表,它是基本类型,也可以序列化自己定义的类型。file:一般情况下是要写入的文件。更广泛地可以理解为为拥有 write() 方法的对象,并且能接受字符串为为 参数,所以,它还可以是一个 StringIO 对象,或者其它自定义满足条件的对象。 protocol:可选项。默认为 False(或者说 0),是以 ASCII 格式保存对象;如果设置为 1 或者 True,则 以压缩的二进制格式保存对象。import pickle# 用 pickle.dump(integers, f) 将数据 integers 保存到了文件 20.dat 中integer = [1, 2, 3, 4, 5]f = open("20.dat", "wb")pickle.dump(integer, f)
pickle.load(),读取文件,也称为反序列化
import pickle# 用 pickle.dump(integers, f) 将数据 integers 保存到了文件 20.dat 中integer = [1, 2, 3, 4, 5]f = open("20.dat", "wb")pickle.dump(integer, f)f.close()# 反序列化,读取文件integer = pickle.load(open("20.dat", "rb"))print(integer)
文件大小比较
import pickleimport osimport chardetd = {}integers = range(9999)d["i"] = integersprint(d)# 下面将这个 dict 格式的对象存入文件f = open("21.dat", "wb")pickle.dump(d, f)f.close()# 显示文件编码格式ff = open("22.dat", "wb")pickle.dump(d, ff, True)ff.close()ff = open("22.dat", "rb")data = ff.read()print(chardet.detect(data))# 得到两个文件的大小s1 = os.stat("21.dat").st_sizes2 = os.stat("22.dat").st_sizeprint("%d, %d, %.2f%%" % (s1, s2, s2/s1 * 100))
自定义类型
import picklefrom io import StringIO, BytesIO# 跟 file 功能类似,只不过是在内存中操作“文件”# 自定义一种类型class Book(object): def __init__(self, name): self.name = name def my_book(self): print("my book is:", self.name)book = Book("<from beginner to master>")book.my_book()file = BytesIO()pickle.dump(book, file, True)# 查看“文件”内容,注意下面不是乱码print(file.getvalue())# 换一种方式,再看内容,可以比较一下# 视觉上,两者就有很大差异pickle.dump(book, file)print(file.getvalue())# 如果要从文件中读出来:# 找到对应类型file.seek(0)book2 = pickle.load(file)book2.my_book()file.close()
Python标准库:pickle
相关内容
- Python 中的 / 运算符的一切运算结果都是浮点数,,lett
- python3-开发进阶Django中序列化以及rest_framework的序列化,
- python环境下实现OrangePi Zero寄存器访问及GPIO控制,,
- WGAN将数值限制在一定范围内 Python代码 tf.clip_by_valu
- python的filter,reduce,map,,1.filterfi
- python-文件的操作,,一、异常 程序
- python----面向对象,,一、类的基础一、创建
- python 取两数的百分比,,Python 2.6
- python Queue/collections.deque,,1.python Q
- Python操作Excel之分组排序,,缘由:需要做一个信息
评论关闭