输出行号及其中的值

时间:2014-06-16 18:19:58

标签: python search csv output

我有这个代码在巨大的csv文件中查找某个值。对于文件中的列2,这些值是223.2516,表示为"行[2]"第3列为58.053,第3列为#34;行[3]"。我已经设置了代码,以便我可以在既定限制内找到接近这些值的任何内容。我知道文件中没有值223.2516,因此我正在查找代码中可以看到的相对较近的所有内容。最后两个命令给出了所有值的输出:

In [54]: [row[2] for row in data if abs(row[2]-223.25)<0.001] 
Out[54]: 
[223.24945646,
 223.25013049,
 223.25093125999999,
 223.24943973000001,
 223.24924296,
 223.24958522]

In [55]: [row[3] for row in data if abs(row[3]-58.053)<0.001]
Out[55]: 
[58.052124569999997,
 58.052942659999999,
 58.053108100000003,
 58.053536250000001,
 58.05346918,
 58.053109259999999,
 58.052188620000003,
 58.052528559999999,
 58.053201559999998,
 58.052009560000002,
 58.052036010000002,
 58.053623790000003,
 58.052450120000003,
 58.052405720000003,
 58.053431590000002,
 58.053709660000003,
 58.053117569999998,
 58.052511709999997]

我遇到的问题是我需要两个值都在同一行内。我不是在寻找彼此独立的价值观。 223值和58.0值都必须在同一行,它们是坐标。 有没有办法只输出同一行或至少是那些值,打印每个值所在的行号,以及值? 这是我的代码:

import numpy
from matplotlib import *
from pylab import *

data = np.genfromtxt('result.csv',delimiter=',',skip_header=1, dtype=float)

[row[2] for row in data if abs(row[2]-223.25)<0.001] 
[row[3] for row in data if abs(row[3]-58.053)<0.001]

2 个答案:

答案 0 :(得分:1)

问题看起来很熟悉。使用枚举。举个例子:

data = [[3, 222], [8, 223], [1,224], [5, 223]]
A = [ [ind,row[0],row[1]] for ind,row in enumerate(data) if abs(row[1]-223)<1 ]

print A

[[1, 8, 223], [3, 5, 223]]

通过这种方式,您可以获得索引,并获得所需的值对。

采纳这个想法并转换回你的例子。如下所示:

[ [ind, row] for ind,row in enumerate(data) if abs(row[2]-223.25)<0.001] 

答案 1 :(得分:0)

@brechmos拥有它。更明确地,enumerate允许您在迭代任何迭代器时跟踪隐式索引。

phrase = 'green eggs and spam':
for ii, word in enumerate(phrase.split()):
  print "Word %d is %s" % (ii, word)