python 不同格式的读取效率(pickle/npy/npz/hdf)_桂花很香,旭很美的博客-CSDN博客_python pickle 加载很慢
python中的Pickle文件和npy文件_心之所向521的博客-CSDN博客_pickle文件
本文简述pickle模块如何处理数据,及与json、numpy对比。
目录
一、简介
pickle比较适合Python本身复杂数据的存储。但是持久化后的字符串是只能用于Python环境,不能用作与其他语言进行数据交换。在pickle中dumps()和loads()操作的类型是bytes类型,而在使用dumpy()和load()读写文件时,要使用rb或wb模式(二进制),也就是只接收bytes类型的数据。
二、使用方法
1. 基于内存的二进制和Python对象转化
(1)pickle.dumps()
将对象序列化成二进制对象,即将Python数据对象obj转换为pickle格式的bytes字符串
(2)pickle.loads()
读取指定的二进制对象,并返回序列化对象。将pickle格式的bytes字符串转换为Python的类型
函数功能:将obj对象序列化存入已经打开的file中。
import pickle
tup1 = ('hello Python', {1, 2, 3}, None)
# 使用pickle.dumps()函数将元组tup1转换成p1
p1 = pickle.dumps(tup1)
print(p1)
# 使用pickle.loads()函数将p1转化成Python对象
t2 = pickle.loads(p1)
print(t2)
#输出
b'\x80\x04\x95\x1d\x00\x00\x00\x00\x00\x00\x00\x8c\x0chello Python\x94\x8f\x94(K\x01K\x02K\x03\x90N\x87\x94.'
('hello Python', {1, 2, 3}, None)
2. 基于文件的二进制和对象转化
(1)pickle.dump()
将对象序列化成二进制对象,并写入文件。
(2)pickle.load()
读取指定的序列化数据文件,并返回对象。
import pickle
tup1 = ('I love Python', {1, 2, 3}, None)
# 使用pickle.dump()函数将tup1转成p1
with open("a.txt", "wb") as f:
pickle.dump(tup1, f)
# 使用pickle.load()将二进制文件对象转换成Python对象
with open("a.txt", "rb") as f:
t3 = pickle.load(f)
print(t3)
# 输出
('I love Python', {1, 2, 3}, None)
三、区别
1.与json区别
pickle本身和json的功能是相同的,都是将Python数据对象保存为持久化的文件,区别是pickle能够保存Python的复杂的数据类型,包括列表、元组、自定义类等,而json只能保存字典类型的数据,同时pickle是能用Python打开,而json却可以被其他语言所读取。
2. 与npy对比
Pickle:读写慢,而且占空间,如果存储的不是对象而是一个numpy数组,最好不要使用pickle;
npy:读写都快,占用空间少。