gpt4 book ai didi

python - 从 Python 中的压缩文本文件中读取行并获取读取的原始压缩字节数

转载 作者:行者123 更新时间:2023-11-28 21:38:01 25 4
gpt4 key购买 nike

我有许多 gzip 压缩的文本文件,我想即时解压缩和读取(在线)和处理,这样我就可以节省磁盘空间并节省从磁盘读取数据的时间,但会牺牲在线解压缩的时间。

所以我使用 gzip 模块以及 tqdm 来跟踪进度。

但是如何找出原始未压缩文件大小的大小,以便在完成跟踪进度之前设置要读取的总字节数(未压缩)数?就我在网上搜索时所关心的而言,对于大于 4 GB 的文件,这个问题很难在 gzip 中解决,这就是我的情况。

或者,我应该跟踪读取的压缩字节数,将总字节数设置为压缩文件的大小。

我怎样才能做到这一点?

这是下面的代码示例,其中的注释也反射(reflect)了我想要实现的目标。

我正在使用 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)

最佳答案

您应该打开以读取底层文件(二进制模式)f = open('filename.gz', 'rb') .然后在上面打开 gzip 文件。 g = gzip.GzipFile(fileobj=f) .您从 g 执行读取操作,并告诉你有多远,你猫f.tell()询问压缩文件中的位置。

EDIT2:顺便说一句。当然你也可以使用tell()GzipFile实例告诉您未压缩文件的距离(读取字节数)。

编辑:现在我看到这只是您问题的部分答案。你还需要总数。恐怕你有点不走运。特别是。如您所述,对于超过 4GB 的文件。 gzip 在最后四个字节中保留未压缩的大小,因此您可以跳到那里并读取它们并跳回(GzipFile 本身似乎没有公开此信息),但由于它是四个字节,因此您只能存储 4GB 作为最大数字, rest 只是被截断为值的低 4B。那样的话,恐怕你到最后才知道。

无论如何,以上提示为您提供了压缩和未压缩的当前位置,希望这能让您至少在一定程度上实现您的目标。

关于python - 从 Python 中的压缩文本文件中读取行并获取读取的原始压缩字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48765610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com