标签:基本 ini open pen 反序列化 标准库 print 维护 情况
pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议。
序列化目的: 1、以某种存储形式使自定义对象持久化;
2、将对象从一个地方传递到另一个地方;
3、使程序更具维护性。
pickle.dump(obj,file[,protocol])
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 pickle import os import chardet d = {} integers = range(9999) d["i"] = integers print(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_size s2 = os.stat("22.dat").st_size print("%d, %d, %.2f%%" % (s1, s2, s2/s1 * 100))
自定义类型
import pickle from 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()
标签:基本 ini open pen 反序列化 标准库 print 维护 情况
原文地址:https://www.cnblogs.com/dc2019/p/13252543.html