无法在python中使用.strip()删除字符

时间:2017-11-22 10:45:57

标签: python strip fasta

我是一名生物学家,需要制作快速脚本来处理一些文件。

文件格式为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。抱歉可怕的代码。

3 个答案:

答案 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 + "]+)")