繁体   English   中英

如何通过python在CSV文件中查找具有已知列号的特定值的行号

[英]How to find row number of a particular value with known column number in csv file through python

我正在研究一个使用三个输入参数-文件名,col_number和value创建函数find_row的问题。 我想要像给定示例中的输出:

例如,如果我们有一个文件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

我现在理解该错误,但无法改进代码。 大家有帮助吗?

谢谢。

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

顺便说一句,做起来更清洁

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

编辑:此外,CSV将给您带来问题。 它找不到'2.2',因为它实际上返回了'2.2'。 当您阅读或确保CSV以“正确”方式保存时,请去掉空格(逗号和内容之间不能有空格)。

Edit2:如果您必须有不相等行的CSV,这将达到目的:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM