gpt4 book ai didi

python - 如何获取gzip压缩文件的随机访问

转载 作者:行者123 更新时间:2023-11-28 18:43:42 26 4
gpt4 key购买 nike

根据 this FAQ on zlib.net可以:

access data randomly in a compressed stream

我知道 Biopyton 1.60 的模块 Bio.bgzf ,其中:

supports reading and writing BGZF files (Blocked GNU Zip Format), a variant of GZIP with efficient random access, most commonly used as part of the BAM file format and in tabix. This uses Python’s zlib library internally, and provides a simple interface like Python’s gzip library.

但对于我的用例,我不想使用该格式。基本上我想要一些东西,它模拟下面的代码:

import gzip
large_integer_new_line_start = 10**9
with gzip.open('large_file.gz','rt') as f:
f.seek(large_integer_new_line_start)

但具有本地 zlib.net 提供的效率,可以提供对压缩流的随机访问。我如何利用 Python 中的随机访问功能?

最佳答案

我放弃了使用 Python 对 gzip 文件进行随机访问。相反,我将我的 gzip 文件转换为带有 block compression/decompression utility 的 gzip block 文件。在命令行上:

zcat large_file.gz | bgzip > large_file.bgz

然后我用了BioPython并告诉获取 bgzip 文件的第 100 万行的 virtual_offset。之后我就能够快速找到 virtual_offset:

from Bio import bgzf

file='large_file.bgz'

handle = bgzf.BgzfReader(file)
for i in range(10**6):
handle.readline()
virtual_offset = handle.tell()
line1 = handle.readline()
handle.close()

handle = bgzf.BgzfReader(file)
handle.seek(virtual_offset)
line2 = handle.readline()
handle.close()

assert line1==line2

我还想指出 SO answer by Mark Adlerexamples/zran.c 上在zlib分布。

关于python - 如何获取gzip压缩文件的随机访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22950030/

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