使用Python从fasta文件中删除句点

2 投票
5 回答
1585 浏览
提问于 2025-04-17 17:38

我刚接触Python(用的是2.7版本),现在想处理一个包含对齐序列的fasta文件,想把里面的句点(.)和破折号(-)去掉。我想写一个循环,让Python逐行检查,把句点和破折号替换成空白。下面是我写的代码(运行后可以去掉句点和破折号,但留下了空格):

InFileName = 'myfile.fasta'
InFile = open(InFileName, 'r')

OutFileName = 'myfile_nodots.fasta'
OutFile = open(OutFileName, 'w')

for Line in InFile:

     Line=Line.replace('.', "")

     Line=Line.replace('-', "")

     Outfile.write(Line) 

InFile.close()
OutFile.close()

如果有任何建议,我会非常感激!

5 个回答

1

使用 fileinputtranslate 可以快速在文件中直接编辑:

import fileinput

for line in fileinput.input("test.txt", inplace=1):
    sys.stdout.write(line.translate(None, '-.'))

在你问之前:是的,它是直接写入文件,而不是写到控制台上 :)

3

你可以把你的代码整理得更整洁一些,使用 with 这个语句来确保文件在使用完后会被关闭。而在 Python 2.7 中,你可以利用 str.translate 的第二个参数来指定要删除的字符。这样,你的代码可以写成:

with open('myfile.fasta') as fin, open('myfile_nodots.fasta', 'w') as fout:
    for line in fin:
        fout.write(line.translate(None, '-.'))
2

你可以稍微简化一下代码:

import re
infilename = 'myfile.fasta'
outfilename = 'myfile_nodots.fasta'
regex = re.compile("[.-]+")    

with open(infilename, 'r') as infile, open(outfilename, 'w') as outfile:
    for line in infile:
        outfile.write(regex.sub("", line))

如果你还想去掉点号或破折号后面的空格,可以使用另一种正则表达式:

regex = re.compile("[.-]+ *")    

撰写回答