我是一名生物学家,需要制作快速脚本来处理一些文件。
文件格式为fasta:
>line1
ACCGAGCTACTAGXXXXX
>line2
ACGTAX
等等。
我想删除所有X字符并快速添加到此脚本中:
print """Input file must be named FILE.fasta"""
fasta_file = raw_input('Input file name:') # Input fasta file
char = raw_input('Which sequence should be stripped?:')
OutFileName = fasta_file.strip('.fasta') + '_stripped.fasta'
OutFile = open(OutFileName, 'w')
WriteOutFile = True
data = open(fasta_file, "r")
for line in data:
if line.startswith('>'):
OutPut = line
else:
OutPut = line.strip(char)
print OutPut
OutFile.write(OutPut)
print(char)
OutFile.close()
quit()
它不起作用,我无法弄清楚原因。有什么帮助吗?
P.S。抱歉可怕的代码。
答案 0 :(得分:3)
其他答案指明了更好的选择。但在您的情况下,[Python 3.Docs]: Built-in Types - str.strip([chars])不起作用,因为文件中的每一行都以 EOLN 终止符结尾,因此 X 实际上并不在字符串。
需要最少代码更改的选项是修改3 rd 行:
char = raw_input('Which sequence should be stripped?:')
为:
char = raw_input('Which sequence should be stripped?:') + "\n"
小心:行fasta_file.strip('.fasta')
可能无法按照您的想法执行操作。在这里,建议使用:
fasta_file.replace('.fasta', '_stripped.fasta')
的 EDIT0 强> :
我认为您在写入输出文件时需要添加 EOLN ,因此您还需要替换此行:
OutPut = line.strip(char)
由:
OutPut = line.strip(char) + "\n"
答案 1 :(得分:0)
使用line.replace(char,'')
代替line.strip(char)
剥离功能仅从边https://docs.python.org/2/library/string.html#string.strip
答案 2 :(得分:0)
您可以使用正则表达式执行此操作:
import re
pattern = re.compile("(\w[^X]+)") # This groups everything but X
stripped = pattern.match(line).group()
对于您的情况,您可以在'其他'中做类似的事情。您的代码部分并替换' X' in"(\ w [^ X] +)"由你的' char'变量:
pattern = re.compile("(\w[^" + char + "]+)")