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

时间:2013-03-01 20:13:17

标签: 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 个答案:

答案 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)

使用fileinputtranslate进行快速就地编辑:

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())