逐行读取gzip压缩文本文件,以便在python 3.2.6中进行处理

时间:2015-10-22 15:46:44

标签: python gzip python-3.2

我在python方面完成了新手,但我的任务是尝试在一台机器上运行一段代码,该机器上有一个不同版本的python(3.2.6)代码最初是为其构建的。

我遇到了逐行阅读gzip文本文件的问题(并根据第一个字符处理它)。代码(显然用python> 3.2.6编写)是

for line in gzip.open(input[0], 'rt'):
    if line[:1] != '>':
        out.write(line)
        continue

    chromname = match2chrom(line[1:-1])
    seqname = line[1:].split()[0]

    print('>{}'.format(chromname), file=out)
    print('{}\t{}'.format(seqname, chromname), file=mappingout)

(对于那些知道的人,这会将FASTA基因组文件解压缩到标题中(使用">"开始时)和序列,并根据此将这些行处理成两个不同的文件)

我找到了https://bugs.python.org/issue13989,其中说明了模式' rt'不能用于python-3.2中的gzip.open并使用以下内容:

import io

with io.TextIOWrapper(gzip.open(input[0], "r")) as fin:
     for line in fin:
         if line[:1] != '>':
             out.write(line)
             continue

         chromname = match2chrom(line[1:-1])
         seqname = line[1:].split()[0]

         print('>{}'.format(chromname), file=out)
         print('{}\t{}'.format(seqname, chromname), file=mappingout)

但上面的代码不起作用:

UnsupportedOperation in line <4> of /path/to/python_file.py:
read1

如何重写此例程以准确提供我想要的内容 - 将gzip文件逐行读入变量&#34; line&#34;和基于第一个字符的处理?

编辑:此例程的第一个版本的回溯是(python 3.2.6):

Mode rt not supported  
File "/path/to/python_file.py", line 79, in __process_genome_sequences  
File "/opt/python-3.2.6/lib/python3.2/gzip.py", line 46, in open  
File "/opt/python-3.2.6/lib/python3.2/gzip.py", line 157, in __init__

第二个版本的回溯是:

UnsupportedOperation in line 81 of /path/to/python_file.py:
read1
File "/path/to/python_file.py", line 81, in __process_genome_sequences

没有进一步的追溯(行数中额外的两行是import iowith io.TextIOWrapper(gzip.open(input[0], "r")) as fin:

1 个答案:

答案 0 :(得分:0)

我实际上似乎已经解决了这个问题。

最后,我必须使用shell("gunzip {input[0]}")来确保可以在文本模式下读取枪械文件,然后使用

读取生成的文件
for line in open(' *< resulting file >* ','r'):
    if line[:1] != '>':
        out.write(line)
        continue

    chromname = match2chrom(line[1:-1])
    seqname = line[1:].split()[0]

    print('>{}'.format(chromname), file=out)
    print('{}\t{}'.format(seqname, chromname), file=mappingout)