python读写二进制文件

本文介绍了Python中的pickle模块,包括其基本的数据序列化和反序列化功能。详细解释了pickle.dump和pickle.load的基本接口及参数含义,并提供了代码示例,演示如何使用pickle模块将数据对象保存到二进制文件中以及如何从文件中重新加载这些对象。

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

使用pickle模块进行二进制文件的读写

python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。

基本接口

pickle.dump(obj, file, [,protocol])  # 文件写入
pickle.load(file)  # 文件读出

protocol:序列化使用的协议版本
0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;
1:老式的二进制协议;
2:2.3版本引入的新二进制协议,较以前的更高效。
(其中协议0和1兼容老版本的python。protocol默认值为0。)
file:对象保存和读取的类文件对象
[ 写入] file对象必须有write()接口,可以是一个以‘w’方式打开的文件或者是一个StringIO对象或者其他任何实现write()接口的对象。
[ 读出] file对象为类文件对象,有read()和readline()接口。

代码实现

#coding=utf-8
# 使用pickle模块读写二进制文件
import pickle
data = {'a': [1, 2.0, 3, 4+6j],
         'b': ('string', u'Unicode string'),
         'c': None
         }
def write(path):
    output = open(path, 'wb')  
    '''
    写二进制文件需要使用'wb',因为二进制文件会出现'/n'换行符,
    实际上是'0X0A',windows平台会自动将其变为两个字符'0X0D',实际文件长度会发生变化。
    而'wb'二进制方式会使文件保持一个字符不变的写入。
    '''
    pickle.dump(data, output)
    output.close()

def read(path):
    file = open(path, 'rb')  # 'rb'与wb'同理
    data1 = pickle.load(file)
    file.close()
    if data1 == data:
        return True
    else:
        return False

while True:
    try:
        write('data.pkl')
        print(read('data.pkl'))
        break
    except:
        print 'Error'

如需转载与本人联系
此博客参考自Scott_Zhang的博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值