python文件IO之pickle 模块读写对象数据

可以向一个文件中写入字符串,读取后也是读取字符串形式,但是不能直接向文件中写入像列表这样的对象,需要 pickle 等模块才行。

pickle 模块介绍

  • pickle 模块使用强大且有效的算法来进行序列化和反序列化。
  • 序列化是指将一个对象转换为能够存储在一个文件中或者在网络上进行传输的字节流的过程(序列化 = 卸载对象)

  • 反序列化指的是相反的过程,它是从字节流中提取出对象的过程(反序列化 = 加载对象)

注意

  • 通常以 dat或者bin为文件后缀名来保存二进制数据等,不过用其它的后缀名也可,毕竟后缀名只单单是一个后缀名。
  • 调用 pickle 模块中的 load 和 dump 函数来读写数据。
  • 调用一次dump就是写入一个数据,调用一次load就是读取一个数据。
  • 可以使用 load 函数重复读取直到函数抛出一个 EOFError 异常(文件末尾异常)。当抛出这个异常时,捕获并处理它以结束文件读取过程。

示例代码

import pickle


def main():
    outfile = open("data2.txt", "wb")
    pickle.dump(45, outfile)   # 写入一个对象
    pickle.dump(56.6, outfile)   # 写入一个对象
    pickle.dump("编程很有趣", outfile)   # 写入一个对象
    pickle.dump([1, 2, 3, 4], outfile)   # 写入一个对象
    outfile.close()

    infile = open("data2.txt", "rb")
    while True:
        try:
            data = pickle.load(infile)
            print(type(data), ": ", data)
        except EOFError:
            print("已经读取完毕")
            break
    infile.close()


main()

运行结果

<class 'int'> :  45
<class 'float'> :  56.6
<class 'str'> :  编程很有趣
<class 'list'> :  [1, 2, 3, 4]
已经读取完毕

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值