这里的症结在于,这是一个巨大的文件。我的目标是避免将整个文件立即读取到内存中,并且避免解析循环中的每一行以获取所需的行(因为这会花费很长时间。该文件的字面长度为1500万行)。
我目前正在做的是以…打开文件 self._FH = gzip.open(filename, "rb")
self._FH = gzip.open(filename, "rb")
…将指针直接移动到所需行的位置(使用许多技巧,但可以使用)并逐行读取。
与下面类似的行(尽管这些示例来自文件的开头,为方便起见和信息起见)…
b'BAM\x01\x17\x18\x00\x00@HD\tVN:1.0\tSO:coordinate\n' b'@SQ\tSN:1\tLN:248956422\n' b'@SQ\tSN:10\tLN:133797422\n' b'@SQ\tSN:11\tLN:135086622\n' b'@SQ\tSN:12\tLN:133275309\n' b'@SQ\tSN:13\tLN:114364328\n' b'@SQ\tSN:14\tLN:107043718\n' b'@SQ\tSN:15\tLN:101991189\n' b'@SQ\tSN:16\tLN:90338345\n' b'@SQ\tSN:17\tLN:83257441\n' b'@SQ\tSN:18\tLN:80373285\n'
有人可能会注意到这是一个BAM文件,因此,如果有更好的方法可以做到,欢迎提出建议…尽管samtools过滤器无法满足我的需要。我必须逐行而不是数据地寻求。