[英]Python 3 bz2 huge file and progress
我正在实现一个工具,它可以解析大量以 bz2 格式压缩的 248GB 文件。 平均压缩系数为 0.04,因此事先将它们解压缩到超过 6 TB 是完全不可能的。
内容文件的每一行都是一个完整的 JSON 记录,所以我使用 bz2 模块open
然后for line in bz2file
读取文件,它工作得很好。 问题是我不知道如何显示任何进度度量,因为我不知道我读取了多少压缩字节,也不知道每个文件中有多少记录。 文件很大。 有些高达 24 GB。
你会如何处理这个问题?
你可以像这样使用tqdm :
from tqdm import tqdm
with open("hugefile.bz2", "r") as bz2file:
for line in tqdm(bz2file, desc="hugefile"):
...
通过这种方式,您将知道您在多少时间内处理了多少行。 但是,如果您想获得流程中的百分比,则需要事先知道文件中有多少行。
如果你不知道,你可以这样计算:
from tqdm import tqdm
total = 0
with open("hugefile.bz2", "r") as bz2file:
for line in bz2file:
total += 1
with open("hugefile.bz2", "r") as bz2file:
for line in tqdm(bz2file, desc="hugefile", total=total):
...
但这意味着要检查文件两次,因此您可能不想这样做。
另一种方法是计算出你正在阅读的行有多少字节,使用这个: https://stackoverflow.com/a/30686735/8915326
并将其与总文件大小相结合
import os
from tqdm import tqdm
hugefile = "hugefile.bz2"
with open(hugefile, "r") as bz2file:
with tqdm(desc=hugefile, total=os.path.getsize(hugefile)) as pbar:
for line in bz2file:
...
linesize = len(line.encode("utf-8"))
pbar.update(linesize)
这样你就不会检查你的文件两次,但你仍然必须弄清楚每行有多少字节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.