我是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()
任何建议都将不胜感激! 仁
答案 0 :(得分:3)
您可以整理代码以使用with
来确保文件已关闭,并在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, '-.'))
答案 1 :(得分: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("[.-]+ *")
答案 2 :(得分:1)
使用fileinput
和translate
进行快速就地编辑:
import fileinput
for line in fileinput.input("test.txt", inplace=1):
sys.stdout.write(line.translate(None, '-.'))
在您提出之前:是的,它会写入文件,而不是写入控制台:)
答案 3 :(得分:0)
假设fasta标题也可能包含破折号或点(即同种型),这很常见,
with open('myfile.fasta') as fin:
with open('myfile_nodots.fasta', 'w') as fout:
for line in fin:
if line.startswith('>'):
fout.write(line)
else:
fout.write(line.translate(None, '-.'))
答案 4 :(得分:-1)
您是否尝试过Outfile.write(Line.strip())
?