【python】数据文件的读写操作1-Pickle模块

Python数据存储:pickle库 - 知乎

python 不同格式的读取效率(pickle/npy/npz/hdf)_桂花很香,旭很美的博客-CSDN博客_python pickle 加载很慢

python中的Pickle文件和npy文件_心之所向521的博客-CSDN博客_pickle文件

本文简述pickle模块如何处理数据,及与json、numpy对比。

目录

一、简介

二、使用方法

1. 基于内存的二进制和Python对象转化

2. 基于文件的二进制和对象转化

三、区别

1.与json区别

2. 与npy对比


一、简介

 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:读写都快,占用空间少。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值