如何对一个文件中的几个字符串进行多次修改并输出到一个新的fi

2024-05-15 01:46:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新的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)用'\u1'替换分类法字符串中的所有空格,并用分号完成分类(参见下面的示例):

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)

但这根本不管用。有人知道我该怎么做吗?你知道吗

非常感谢你的帮助!你知道吗


Tags: 文件testreadline软件as序列标识符open
1条回答
网友
1楼 · 发布于 2024-05-15 01:46:11

以下应起作用:

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

相关问题 更多 >

    热门问题