无法在 python 中使用 .strip() 剥离字符

Cannot strip character using .strip() in python

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

文件格式为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。抱歉代码太糟糕了。

使用 line.replace(char,'') 代替 line.strip(char) Strip 函数仅从 https://docs.python.org/2/library/string.html#string.strip

边移除字符

您可以使用正则表达式来做到这一点:

import re
pattern = re.compile("(\w[^X]+)")  # This groups everything but X
stripped = pattern.match(line).group()

对于您的情况,您可以在代码的 'else' 部分执行类似的操作,并将 "(\w[^X]+)" 中的 'X' 替换为您的 'char'变量:

 pattern = re.compile("(\w[^" + char + "]+)")

其他答案指定了更好的选择。但是在您的情况下,[Python 3.Docs]: Built-in Types - str.strip([chars]) 不起作用,因为文件中的每一行都以 EOLN 终止符结尾,因此 X 不是实际上在字符串的末尾。

需要最少代码更改的选项是修改第 3rd 行:

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"