无法在 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"
我是一名生物学家,需要制作一个快速脚本来处理一些文件。
文件格式为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"