2013-03-25 66 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