2011-03-11 58 views
1

我一直試圖刪除下劃線('_')及其後的相關數字。 這是我的文本文件中的第一行。如何刪除下劃線('_')以及第一列中的前幾位數

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])))) 

謝謝你們的幫忙。 Kesh

+0

所有這些地方,你想刪除小數點後的下劃線下面的數字?如果是這樣,你可以搜索適當的小數點。 – John 2011-03-11 19:12:04

+0

非常感謝你的努力,Bozhidar Batsov。它適用於我的文本文件中的所有類型。你只是我的拯救我的一天。我非常感謝所有爲我的問題提供某種形式解決方案的人。非常感謝。保持良好的工作,夥計們。乾杯,凱瑟。 – user587646 2011-03-11 20:04:21

+0

@ user587646如果他的回答有效,則應將其標記爲已回答。 – 2011-03-11 21:15:16

回答

0

應該這樣做:

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

這對我不起作用。非常感謝你的努力。 – user587646 2011-03-11 19:42:47

+0

它適用於你在你問題中顯示的那一行。我不確定哪些不適合你。 – 2011-03-11 21:19:51

+0

它就像一個魅力,它是錯字!非常感謝你! – user587646 2011-03-15 02:16:32

0

這是做你要找的?

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

這應該做你想要什麼:從Python REPL

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

測試:

>>> 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' 
+0

謝謝你們,它只適用於這個特定的。我有這些類型的線噸。下劃線後的值範圍爲0-9。 Nathan的方法應該已經將它從所有方面中刪除了,但它並沒有。什麼是'r'和r'\ 1 \ 3'? – user587646 2011-03-11 19:42:19

+0

@ user587646你能舉出更多的例子嗎? – 2011-03-11 19:44:07

+1

r「」表示一個原始字符串 - 對於正則表達式很有用 – 2011-03-11 21:18:25

0

str.rpartition( sep)¶將在se的最後一次出現時分割字符串p

S = 「this_is_a_string」

split_s = s.rpartition( '_')

split_s

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

split_s [0]

'this_is_a'