如何仅删除下划线('_')以及第一列中的前几位数字

时间:2011-03-11 19:00:07

标签: python python-3.x

我一直在尝试删除带有相关数字的下划线('_')。 这是我的文本文件中的第一行。

JP_001033692.1_551  N   -1  NO  99.5425%    0.0022875

我想从“JP_001033692.1_551”中删除“_551”而不从后续列中删除其他项目。

预期的行将是:

JP_001033692.1  N   -1  NO  99.5425%    0.0022875

这是我的代码:

fname = open(raw_input('Enter input filename: '),'r' )
outfile = open('decValues.txt','w')

for line in fname:
    line = re.sub('[\(\)\{\}\'\'\,<>]','', line)
    fields = line.rstrip("\n").split()
    outfile.write('%s  %s %s  %s %1.4f\n' % (fields[0],fields[1],fields[2],fields[3],(float(fields[5]))))

谢谢你们的帮助。 凯什

4 个答案:

答案 0 :(得分:0)

这是否符合您的要求?

re.sub("(?P<x>(_.*)?)_\w*","\g<x>",str)

答案 1 :(得分:0)

这应该做你想要的:

re.sub(r'^([^ ]*)(_[0-9]*)( +)', r'\1\3', line)

从Python repl测试:

>>> import re
>>> line = 'JP_001033692.1_551  N   -1  NO  99.5425%    0.0022875'
>>> re.sub(r'^([^ ]*)(_[0-9]*)( +)', r'\1\3', line)
'JP_001033692.1  N   -1  NO  99.5425%    0.0022875'

答案 2 :(得分:0)

应该这样做:

re.sub(r"(\.\d+)_\d+", r"\1", line)

答案 3 :(得分:0)

str.rpartition(sep)¶会在最后一次出现的sep上拆分字符串

  
    
      

s =“this_is_a_string”

             

split_s = s.rpartition('_')

             

split_s

    
  

('this_is_a','_','string')

  
    
      

split_s [0]

    
  

'this_is_a'