序列1.1.1 ATGCGCGCGATAAGGCGCTA
ATATTATAGCGCGCGCGCGGATATATATATATATATATATT
顺序1.2.2 ATATGCGCGCGCGCGCGGCG
ACCCCGCGCGCGCGCGGCGCGATATATATATATATATATATT
序列2.1.1 ATTCGCGCGAGTATAGCGGCG
现在,我想删除以'>'开头的每一行的最后一位数字。例如,在第一行中,我想删除'.1'(最右边),在第二行中,我想删除'.2',然后将文件的其余部分写入新文件。谢谢,
答案 0 :(得分:7)
import fileinput
import re
for line in fileinput.input(inplace=True, backup='.bak'):
line = line.rstrip()
if line.startswith('>'):
line = re.sub(r'\.\d$', '', line)
print line
许多细节可以根据您想要的处理细节进行更改,但您没有明确表达,但这是一般性的想法。
答案 1 :(得分:4)
if line.startswith('>Sequence'):
line = line[:-2] # trim 2 characters from the end of the string
或者在句号之后可能有多个数字:
if line.startswith('>Sequence'):
dot_pos = line.rfind('.') # find position of rightmost period
line = line[:dot_pos] # truncate upto but not including the dot
如果序列与>序列
在同一行上进行编辑如果我们知道只有一位数字可以移除,我们可以用以下方式删除句号和数字:
line = line[:13] + line[15:]
这是使用Python的一个名为 slices 的功能。索引从零开始,并且在范围的末尾是独占的,因此line[0:13]
将为我们提供line
的前13个字符。除非我们想要从头开始,0是可选的,所以line[:13]
做同样的事情。类似地,line[15:]
给出了从字符15开始到字符串结尾的子字符串。
答案 2 :(得分:4)
import re
trimmedtext = re.sub(r'(\d+\.\d+)\.\d', '$1', text)
应该这样做。比搜索起始字符更简单(它不会影响你的DNA链)
答案 3 :(得分:2)
将"".join(line.split('.')[:-1])
映射到文件的每一行。
答案 4 :(得分:1)
这是一个简短的脚本。像以下一样运行:script [filename to clean]
。省略了大量错误处理。
它使用生成器进行操作,因此它也可以在大文件上正常工作。
import sys
import os
def clean_line(line):
if line.startswith(">"):
return line.rstrip()[:-2]
else:
return line.rstrip()
def clean(input):
for line in input:
yield clean_line(line)
if __name__ == "__main__":
filename = sys.argv[1]
print "Cleaning %s; output to %s.." % (filename, filename + ".clean")
input = None
output = None
try:
input = open(filename, "r")
output = open(filename + ".clean", "w")
for line in clean(input):
output.write(line + os.linesep)
print ": " + line
except:
input.close()
if output != None:
output.close()
答案 5 :(得分:0)
import re
input_file = open('in')
output_file = open('out', 'w')
for line in input_file:
line = re.sub(r'(\d+[.]\d+)[.]\d+', r'\1', line)
output_file.write(line)