第八章:数据压缩与归档-bz2:bzip2压缩-读压缩文件

8.3.5 读压缩文件
要从之前压缩的文件读回数据,需要用读模式(‘rb’)打开文件。从read()返回的值是一个字节串。

import bz2
import io

with bz2.BZ2File('example.bz2','rb') as input:
    with io.TextIOWrapper(input,encoding='utf-8') as dec:
        print(dec.read())

这个例子读取上一节bz2_file_write.py所写的文件。BZ2File用一个TextIOWrapper包装,将所读取的字节解码为Unicode文本。
运行结果:

Contents of the example file go here.

读文件时,还可以用seek()定位,然后只读取部分数据。

import bz2
import contextlib

with bz2.BZ2File('example.bz2','rb') as input:
    print('Entire file:')
    all_data = input.read()
    print(all_data)

    expected = all_data[5:15]

    # Rewind to beginning
    input.seek(0)

    # Move ahead 5 bytes
    input.seek(5)
    print('Starting at position 5 for 10 bytes:')
    partial = input.read(10)
    print(partial)

    print()
    print(expected == partial)

seek()位置是相对未压缩数据的位置,所以调用者并不需要知道数据文件是压缩文件。这就允许将一个BZ2File实例传入一个原本接收常规未压缩文件的函数。
运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值