Python标准库:pickle

时间:2020-07-06 01:03:21   收藏:0   阅读:130

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()

 

 

 

 

 

 

 

 

 

 

 

 

 

 
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!