pickle.load及pickle.dump

本文介绍了Python中pickle模块的基本使用方法,包括如何序列化和反序列化对象。通过实例展示了如何将字典对象序列化并保存到文件中,再从文件中读取并还原为原始对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python的pickle模块实现了基本的数据序列和反序列化。

序列化就是把一个对象变成二进制内容,就是一个byte[]数组。为什么需要序列化?因为序列化后可以把byte[]内容保存到文件中,也可以通过网络传输到远程。
有序列化就有反序列化,也就是把存储到文件中或者从网络上读取的二进制内容 即byte[]数组 变回对象。

基本使用方法

pickle.dump(obj,file,[,protocol])
  • 功能:将对象obj保存到文件file中去。
  • file必须有write接口。如果protol>=1,文件对象需要以二进制模式打开。
  • protocol为序列化使用的协议版本,默认为0。0表示ASCII协议,即序列化的对象使用ASCII码表示;1表示老式的二进制协议;2表示新的二进制协议,较以前的更高效。其中协议0和1兼容老版本的python。
pickle.load(file)
  • 功能:从file中读取字符串,并将其重构为原python对象
  • file有read()和readline()接口

使用举例

import pickle
data1 = {'A' : [0,1,2,3],'B':'Nice to meet you!','C':None}

print(data1)	
Out[13]: {'A': [0, 1, 2, 3], 'B': 'Nice to meet you!', 'C': None}

file = open('data1.pkl','wb')	# 如果不存在data1.pkl,将会在本路径下自动创建一个可写文件
pickle.dump(data1,file)	# 将data1对象序列化存入file
file.close()	# 及时关闭文件
file_read = open('data1.pkl','rb')	# 可读方式打开文件

print(file_read)	
Out[10]: <_io.BufferedReader name='data1.pkl'>

data1_read = pickle.load(file_read)	# 从文件中读取内容

print(data1_read)	
Out[12]: {'A': [0, 1, 2, 3], 'B': 'Nice to meet you!', 'C': None}

file_read.close() # 及时关闭文件

文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。

且文件读写时都有可能产生error,一旦出错,后面的.close()就不会调用。所以为了保证无论是否出错都能正确关闭文件。

python引入了with语句来自动帮助调用close()方法。

with open(path,'rb') as f:
	...把f当成以上的file来使用

举例

with open('data1.pkl','rb') as f:	# 打开文件'data1.pkl'
        data_read = pickle.load(f)	# 不需要调用close()函数
        print(data_read)
        
{'A': [0, 1, 2, 3], 'B': 'Nice to meet you!', 'C': None}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值