首页 > 解决方案 > 如何选择fasta文件中标题的最后一个字符?

问题描述

我有一个这样的fasta文件:

>XP1987651-apple1
ACCTTCCAAGTAG
>XP1235689-lemon2
TTGGAGTCCTGAG
>XP1254115-pear1
ATGCCGTAGTCAA

我想创建一个文件,选择以“1”结尾的标题,例如:

>XP1987651-apple1
ACCTTCCAAGTAG
>XP1254115-pear1
ATGCCGTAGTCAA

到目前为止,我创建了这个:

fasta = open('x.fasta')
output = open('x1.fasta', 'w')
seq = ''

for line in fasta:
    if line[0] == '>' and seq == '':
        header = line
    elif line[0] != '>':
        seq = seq + line


for n in header:
    n = header[-1]
    if '1' in n:
        output.write(header + seq)
    header= line
    seq = ''


if "1" in header:
    output.write(header + seq)

output.close()

但是,它不会在创建的新文件中产生任何输出。你能找出错误吗?谢谢

标签: pythonstringsequencefasta

解决方案


一种选择是将整个文件读入一个字符串,然后使用re.findall以下正则表达式模式:

>[A-Z0-9]+-\w+1\r?\n[ACGT]+

示例脚本:

fasta = open('x.fasta')
text = fasta.read()
matches = re.findall(r'>[A-Z0-9]+-\w+1\r?\n[ACGT]+', text)
print(matches)

对于您上面提供的示例数据,将打印:

['>XP1987651-apple1\nACCTTCCAAGTAG', '>XP1254115-pear1\nATGCCGTAGTCAA']

推荐阅读