如何解决Python 3 bz2 大文件和进度
我正在实施一个工具,可以解析以 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",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)
这样您就不会重复查看文件两次,但您仍然需要弄清楚每行有多少字节。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。