过滤基于多列的文本文件

时间:2013-03-25 10:49:25

标签: python

我有一个问题,这在普通的编程意义上是微不足道的,但我想找到另一个解决方案,如果可能的话,使用一些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

我想要做的是按以下方式过滤文本文件: 当我在第4列中有“_0”或“_1”或“_2”时,我想检查第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

无论如何都可以在没有循环的情况下这样做吗?

1 个答案:

答案 0 :(得分: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)
相关问题