如何通过python在csv文件中找到已知列号的特定值的行号

时间:2016-06-04 01:19:03

标签: python csv row

我正在研究一个问题,即创建一个带有三个输入参数的函数 find_row - 文件名,col_number和value。我想要输出,如给定的例子:

例如,如果我们有一个文件a.csv:

 1, 1.1, 1.2
 2, 2.1, 2.2
 3
 4, 4.1, 4.2 

然后

print(find_row('a.csv',0,4))将打印3,

print(find_row('a.csv',2,2.2))会打印1,

print(find_row('a.csv',0,100))将打印无。

我尝试的代码是:

 import csv

 def find_row(filename,col_number,value):
     var = str(value)
     coln = str(col_number)
     o = open(filename, 'r') 
     myData = csv.reader(o) 
     index = 0 
     for row in myData:
        if row[col_number] == var:
            return index 
        else : 
            index+=1

 print find_row('a.csv',2,2.2)

抛出错误:

   File "C:/Users/ROHIT SHARMA/Desktop/1.py", line 17, in find_row
     if row[col_number] == var:

   IndexError: list index out of range

我现在理解错误,但无法改进代码。这里的人有什么帮助??!

感谢。

1 个答案:

答案 0 :(得分:2)

在CSV文件中,第3行只有一列,因此2不是有效索引。

顺便说一下,做起来比较干净

 for index, row in enumerate(myData):
    if row[col_number] == var:
        return index

编辑:此外,该CSV将给您带来问题。它无法找到2.2'因为它实际上会返回' 2.2&#39 ;.在阅读时删除空格或确保CSV已保存"正确"方式(逗号和内容之间没有空格)。

Edit2:如果你必须有一个不等行的CSV,这就可以了:

for index, row in enumerate(myData):
    try:
        if row[col_number] == var:
            return index
    except IndexError:
        pass
相关问题