1

我是 pythong 编程的新手,并且有一个我想解析以在特定软件中使用的 fasta 文件。该文件包含两行:1) 一个序列标识符和一个由空格分隔的分类,分类中的最后一个物种名称也可能包含空格,以及 2) 一个 dna 序列(参见下面的示例):

>123876987 Bacteria;test;test;test test test
ATCTGCTGCATGCATGCATCGACTGCATGAC
>239847239 Bacteria;test;test;test1 test1 test1
ACTGACTGCTAGTACGATCGCTGCTGCATGACTGAC

经过一番努力和一些帮助,我设法将我的 fasta 文件解析为仅显示序列 ID 和分类的分类文件:

123876987 Bacteria;test;test;test test test
239847239 Bacteria;test;test;test1 test1 test1

但是对于我使用的软件,需要以特殊方式格式化分类文件。分类文件的内容必须:1) 删除 fasta 文件中的“>”,2) 用制表符将标识符和分类与每个序列头分开(即替换字符串中第一次出现的空格通过制表符),3)将分类字符串中的所有空格替换为“_”,并以分号结束分类(参见下面的示例):

123876987    Bacteria;test;test;test_test_test;
239847239    Bacteria;test;test;test1_test1_test1;

我一直在尝试通过摆弄我的工作脚本来做到这一点:

with open("test.fasta", "r") as fasta, open("test.tax", "w") as tax:
    while True:
        SequenceHeader= fasta.readline()
        Sequence= fasta.readline()
        if SequenceHeader == '':
            break
        tax.write(SequenceHeader.replace('>', '')) 

修改如下:

with open("test.fasta", "r") as fasta, open("clean_corrected.tax", "w") as tax:
    while True:
        SequenceHeader= fasta.readline()
        Sequence= fasta.readline()      
        old = {'>',' '}
        new = {'','_'}
        CorrectedHeader = SequenceHeader.replace('old','new')
        if SequenceHeader == '':
            break
        tax.write(CorrectedHeader)

但这根本行不通。有谁知道我该怎么做?

非常感谢您的帮助!

4

1 回答 1

2

以下应该有效:

with open("test.fasta", "r") as fasta, open("test.tax", "w") as tax:
    for line in fasta:
        if line.startswith('>'):
            line = line[1:]                   # remove the '>' from start of line
            line = line.replace(' ', '\t', 1) # replace first space with a tab
            line = line.replace(' ', '_')     # replace remaining spaces with '_'
            line = line.strip() + ';\n'       # add ';' to the end
            tax.write(line)                   # write to the output file
于 2013-05-31T17:55:52.067 回答