我正在研究一个问题,即创建一个带有三个输入参数的函数 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
我现在理解错误,但无法改进代码。这里的人有什么帮助??!
感谢。
答案 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