【问题标题】:Find position in a csv list在 csv 列表中查找位置
【发布时间】:2014-04-09 22:28:14
【问题描述】:

假设我有以下 CSV 文件;

1.41, 123456
1.42, 123456
1.43, 123456

并且我想在这种情况下找到第 0 行中值的“位置”/位置,即“1.41、1.42、1.43”,具体取决于特定行值是否大于或等于任意输入值。

例如,如果输入值为 1.42,我们将返回位置 0 和 1,或者如果输入值为 1.4,我们将返回 0、1 和 2。同样,如果值为 1.45,我们将不返回任何职位。这是我所拥有的:

out = open("test.csv","rU")
dataf=csv.reader(out, delimiter=',')

for row in dataf:
    x = row[0]


    for i in xrange(len(x)):
    if x[i] >=1 :
        print i

只为得到,

0
1
2
3
0
1
2
3
0
1
2
3

然后我用

for i in xrange(len(x)):
if x[i] >=2 :
    print i

但我仍然得到相同的位置值。谁能引导我朝着正确的方向前进?

【问题讨论】:

  • 首先,请确保上面的缩进是发布方面的错误或与您的代码完全相同。其次,您是否尝试(实际上)根据值查找行号?说,1.43 返回3
  • 您能解释一下“第 0 行中值的位置”是什么意思吗?或许可以说出上面示例中的预期输出是什么。
  • 谢谢,缩进是正确的,但无论哪种方式都可以。是的,如果值等于或大于 1.43,我需要返回位置“2”。 (位置是 2,因为我们从 0 开始,你可能知道)
  • if the value was equal to or greater than 1.43. -- 这是否意味着如果你在上面的 CSV 中搜索1.44,它仍然应该返回第三行?嗯。我可能提前几秒钟发布了答案。
  • 嗨,s16h,目的是找到值的位置,例如如果 x[i] == 1.42,我们将返回位置“1”。

标签: python csv position xrange


【解决方案1】:

据我所知,这可以满足您的要求...

#!/usr/bin/env python

import csv

value = 1.42

out = open("test.csv","rU")
dataf=csv.reader(out, delimiter=',')
matches = [float(row[0]) >= value for row in dataf]
matches.reverse()

for i,m in enumerate(matches):
    if m: 
        print i

matches 是一个布尔值列表,显示每行的第一列是否大于value。看起来你想从下往上订购,所以我reversed 列表。如果第一列中的值大于或等于value,则循环打印(反向)列表的索引。

value = 1.42
输出:

0
1

value = 1.4
输出:

0
1
2

value = 1.45
没有输出。

【讨论】:

  • 不错的汤姆,非常成功。终于解脱了。唯一的编辑是我删除了matches.reverse() - 我知道我在我的问题中暗示了这一点,但我从来没有想过,因为值的顺序在实践中是随机的。非常感谢。
  • @user3439187 没问题。我看到您对这个网站比较陌生,并且有几个问题似乎已经解决了。不要忘记接受答案并为您认为有用的答案投票。
  • 我试过了,但在我回答了几个问题并建立了声誉之前,他们不会让我这么做!对不起,伙计,我会回来的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多