2014-04-09 69 views
0

說我有以下CSV文件;在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 

,但我仍然會得到相同的位置值。任何人都可以引導我走向正確的方向嗎?

+0

首先,請確保上面的縮進是發佈側的錯誤還是與您的代碼完全相同。其次,你是否試圖 - 實際上 - 根據價值找到行號?說,1.43'返回'3'? – Manhattan

+0

你能解釋一下「0行中的值的位置」是什麼意思嗎?也許可以說上面例子中的預期輸出是什麼。 – s16h

+0

謝謝,縮進是正確的,但它會以任何方式工作。是的,如果值等於或大於1.43,我需要返回位置「2」。 (這個位置是2,因爲我們從0開始,如你所知) – user3439187

回答

0

據我所知,這樣做你問...

#!/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更大。它看起來像你想從下往上訂購,所以我reverse d列表。如果第一列中的值大於或等於value,則循環顯示(反轉)列表的索引。

value = 1.42
輸出:

0 
1 

value = 1.4
輸出:

0 
1 
2 

value = 1.45
沒有輸出。

+0

不錯的湯姆,非常棒。終於解脫了。唯一的編輯是我刪除了matches.reverse() - 我知道我暗示了在我的問題中,但我從來沒有這樣做,因爲值的順序在實踐中是隨機的。非常感激。 – user3439187

+0

@ user3439187沒問題。我發現你對這個網站比較陌生,並且有幾個問題似乎已經解決了。不要忘記接受答案,並提高你認爲有用的答案。 –

+0

我已經嘗試過,但他們不會讓我,直到我回答了幾個問題,並建立了聲譽!對不起隊友,我會回來的。 – user3439187