如何消除每条顶行的最后一位数字

时间:2009-08-14 15:52:28

标签: python file

  

序列1.1.1 ATGCGCGCGATAAGGCGCTA
      ATATTATAGCGCGCGCGCGGATATATATATATATATATATT
  顺序1.2.2 ATATGCGCGCGCGCGCGGCG
      ACCCCGCGCGCGCGCGGCGCGATATATATATATATATATATT
  序列2.1.1 ATTCGCGCGAGTATAGCGGCG

现在,我想删除以'>'开头的每一行的最后一位数字。例如,在第一行中,我想删除'.1'(最右边),在第二行中,我想删除'.2',然后将文件的其余部分写入新文件。谢谢,

6 个答案:

答案 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)