【发布时间】:2018-02-13 11:19:13
【问题描述】:
我有许多 gzip 压缩的文本文件,我想在运行中(在线)解压缩和读取并进行处理,这样我就可以节省磁盘空间,还可以节省从磁盘读取数据的时间,但会牺牲在线解压缩的时间。
所以我使用 gzip 模块以及 tqdm 来跟踪进度。
但是我怎样才能找出原始未压缩文件大小的大小,以便在完成之前设置要读取的总字节数(未压缩)以跟踪进度?就我在网上搜索时而言,这个问题很难在 gzip 中解决大于 4 GB 的文件,这是我的情况。
或者我应该跟踪读取的压缩字节数,将总字节数设置为压缩文件的大小。
我怎样才能做到这一点?
这是下面的代码示例,其中 cmets 也反映了我想要实现的目标。
我正在使用 Python 3.5。
import gzip
import tqdm
import os
size = os.path.getsize('filename.gz')
pbar = tqdm.tqdm(total=size, unit='b', unit_scale=True, unit_divisor=1024)
with gzip.open('filename.gz', 'rt') as file:
for line in file:
bytes_uncompressed = len(line.encode('utf-8'))
# but how can I get compressed bytes read count?
# bytes_compressed = ...?
# pbar.update(bytes_compressed)
【问题讨论】: