我有一个类似这样的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()
但是,它不会在创建的新文件中生成任何输出。你能指出错误吗? 多谢各位
您可以从获取单个记录的列表开始,这些记录由
'>'
分隔,并使用换行符.split('\n', 1)
单独拆分来提取标题和正文然后,您可以简单地筛选出不以
1
结尾的记录一个选项是将整个文件读入字符串,然后将
re.findall
与以下正则表达式模式一起使用:示例脚本:
对于您上面提供的示例数据,这将打印:
当您看到匹配的标题行时,可以非常简单地设置一个标志
这避免了将整个文件读入内存;一次只检查一行
可能会注意到
line
将在行尾包含换行符。我选择只保留它;有时,如果您使用line = line.rstrip('\n')
对其进行修剪并在必要时将其添加回输出中,事情会变得更容易相关问题 更多 >
编程相关推荐