使用Python从fasta文件中删除句点
我刚接触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
使用 fileinput
和 translate
可以快速在文件中直接编辑:
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("[.-]+ *")