删除 fasta 序列中的特定模式

Remove a specific pattern in fasta sequences

我有一个这样的fasta文件,

>IWB12626
AACTTGAGGGACGTGCAGCTAAGGGAGGACTACTATCCAGCACCGGAGAA[T/C]GACATGATGATCACAGAGATGCGGGCTGAATCTTGCCTCCGGTTTGAGCA
>IWB49383
CMGCTCATTTCTGCCGGGCTCGATAGCTGCCCTGTTCTTGAGAAGATCTC[A/G]ATTAAGGTGGAGGGCGATCTCCGGACTTGTCCGCGTCCATTTCACGGGTC

我需要删除方括号“[]”、“/”和此符号“/”后的核苷酸,因此基本上选择两个变体中的第一个。这是我的脚本,但我不知道如何指定我需要在/之后删除一个字母的程序。

with open('myfile.fasta') as f:
    with open('outfile.fasta', 'w') as out:
        for line in f:
            if line.startswith('>'):
                out.write(line)
            else:
                out.write(line.translate(None, '[/a-z0-9]'))

我的预期输出,

>IWB12626
AACTTGAGGGACGTGCAGCTAAGGGAGGACTACTATCCAGCACCGGAGAATGACATGATGATCACAGAGATGCGGGCTGAATCTTGCCTCCGGTTTGAGCA
>IWB49383
CMGCTCATTTCTGCCGGGCTCGATAGCTGCCCTGTTCTTGAGAAGATCTCAATTAAGGTGGAGGGCGATCTCCGGACTTGTCCGCGTCCATTTCACGGGTC

您可以使用 re.sub 函数。

with open('myfile.fasta') as f:
    with open('outfile.fasta', 'w') as out:
        for line in f:
            if line.startswith('>'):
                out.write(line)
            else:
                out.write(re.sub(r'[\[\]]|/.', '', line))

/. 匹配 / 以及正斜杠后面的字符。 [\[\]] 字符 class 匹配 [] 符号。 | 称为交替运算符或逻辑或运算符,通常用于组合两个模式。因此,将所有匹配的字符替换为空字符串将为您提供所需的输出。