tom*_*sen 3 python indexing gzip random-access
在压缩流中随机访问数据
我知道Biopyton 1.60的Bio.bgzf模块,其中:
支持读写BGZF文件(Blocked GNU Zip Format),这是GZIP的一种变体,具有高效的随机访问,最常用作BAM文件格式的一部分和tabix.它在内部使用Python的zlib库,并提供一个简单的接口,如Python的gzip库.
但对于我的用例,我不想使用那种格式.基本上我想要一些东西,它模仿下面的代码:
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)
Run Code Online (Sandbox Code Playgroud)
但是本机zlib.net提供的效率可以提供对压缩流的随机访问.如何利用Python中的随机访问功能?
我放弃了使用Python对gzip压缩文件进行随机访问.相反,我在命令行上使用块压缩/解压缩实用程序将我的gzip压缩文件转换为块gzip压缩文件:
zcat large_file.gz | bgzip > large_file.bgz
Run Code Online (Sandbox Code Playgroud)
然后我使用BioPython并告诉我获取bgzipped文件的行号为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
Run Code Online (Sandbox Code Playgroud)
我还想指出Mark Adler在zlib发行版中的examples/zran.c上的回答.
| 归档时间: |
|
| 查看次数: |
1590 次 |
| 最近记录: |