有没有办法在不调用 next() 的情况下跳过 Python 中 bz2 文件的前 x 行?

问题描述

我正在尝试阅读最新的维基数据转储,同时跳过第一行,比如 100 行。

有没有比重复调用 next() 更好的方法

WIKIDATA_JSON_DUMP = bz2.open('latest-all.json.bz2','rt')

for n in range(100):
    next(WIKIDATA_JSON_DUMP)

或者,有没有办法在 bash 中拆分文件,例如,使用 bzcat 将选择块通过管道传输到较小的文件

解决方法

如果它是使用类似 bgzip 的东西压缩的,您可以跳过块,但它们将包含可变数量的行,具体取决于压缩率。对于作为单个流的原始 bzip 文件,由于压缩格式的性质,我认为您别无选择,只能读取并丢弃要跳过的行。

,

您可以在 bash 中尝试以下操作,例如跳过前 10 行:

bzcat -d -c /tmp/myfile.bz2 | tail -n +11

注意尾部有你想要跳过的 N+1 行。