2013-03-25 77 views
1

我有一個在普通編程意義上微不足道的問題,但是我想找到另一個解決方案來使用一些python技巧來做到這一點,如果可能的話。基於多列的過濾文本文件

我有一個文本文件如下:

A1 1 5 g1_0 10 
A1 6 8 g2_0 13 
A1 9 12 g3 18 
A1 15 24 g4 2 
A1 25 27 g5 5 
A1 30 33 g1_1 20 
A1 44 67 g10 19 
A1 69 77 g9 19 
A1 80 99 g6 19 
A1 153 166 g2_1 19 

我想要做的是過濾文本文件以下列方式: 當我有「_0」或「_1」或「_2」在第4列中,我想檢查第5列。如果第5列有最高數字,我想用「_」除去所有其他數字,只保留分數較高的數字。

PS:我想保留最高分的那一列,對於第4列的每個值。例如,在這種情況下,這些值將保持不變,它不是全部反對所有比較,而是每對或三元組具有「_0 「‘_1’,‘_2’應單獨相比,得分最高:

A1 9 12 g3 18 
A1 15 24 g4 2 
A1 25 27 g5 5 
A1 30 33 g1_1 20 
A1 44 67 g10 19 
A1 69 77 g9 19 
A1 80 99 g6 19 
A1 153 166 g2_1 19 

反正是有做到不循環了很多?

+0

答案是肯定的大熊貓... – YXD 2013-03-25 11:11:35

+0

你需要保持秩序w.r.t. 'g',還是輸出可以在'g1_1,g2_1,g3,...'命令中? – DSM 2013-03-25 11:41:23

+0

@DSM的順序並不重要.. – ifreak 2013-03-25 12:37:09

回答

1
import numpy as np 
nk=np.genfromtxt('input.txt', dtype=None) 
result1={} 
for x in nk: 
    result1.setdefault(x[3].split('_')[0],[]).append(x[4]) 
for x in nk: 
    if x[4]==max(result1[x[3].split('_')[0]]):print x 

輸出:

('A1', 9, 12, 'g3', 18) 
('A1', 15, 24, 'g4', 2) 
('A1', 25, 27, 'g5', 5) 
('A1', 30, 33, 'g1_1', 20) 
('A1', 44, 67, 'g10', 19) 
('A1', 69, 77, 'g9', 19) 
('A1', 80, 99, 'g6', 19) 
('A1', 153, 166, 'g2_1', 19) 
+0

這個工作就像一個魅力,謝謝;) – ifreak 2013-03-26 09:23:32