Python 如何仅删除第一列中的下划线(“”)和前面的数字

Python 如何仅删除第一列中的下划线(“”)和前面的数字,python,python-3.x,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: '),

我一直在尝试删除下划线“”及其后面的关联数字。 这是我的文本文件中的第一行

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]))))
谢谢你们的帮助。
凯什

这能满足你的需求吗

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

这应该满足您的要求:

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'
这应该做到:

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

str.rpartitionsep将在最后一次发生sep时分割字符串

s=这是一个字符串

分割=分割

斯普利特

'这是','字符串'

拆分[0]

‘这是’


是否所有这些位置都要删除小数点后的数字后的下划线?如果是这样,你可以搜索适当的小数点。非常感谢你的努力,博日达尔·巴佐夫。它适用于我文本文件中的所有类型。你刚刚救了我一天。我非常感谢所有为我的问题提供某种形式解决方案的人。非常感谢。继续努力,伙计们。干杯,凯什。@user587646如果他的答案有效,你们应该把它标记为已回答。谢谢你们,它只适用于这个特定的问题。我有很多这样的线路。下划线后面的值范围为0-9。这是内森的方法,他本应该把它从所有人身上移除,但事实并非如此。“r”和“r”\1\3”是什么?@user587646您能给出更多的行示例吗?r表示原始字符串-对regexIt有用,可以与您在问题中显示的行一起使用。我不确定什么对你不起作用。