如何在Python中的CSV文件中查找特定项目的行号?

我一直在寻找一个解决scheme,但我还没有find一个。 所以,我试图在我的csv文件中find特定input的行号。 例如,让这是我正在parsing的csv文件 –

a b c d 

这是一个有100行1列的文件。 所以我给在input“D”,我应该得到4.我试过这个代码,但它给了我无 –

 def find_index(input): o = open('products.csv', 'rU') myData = csv.reader(o) index = 0 for row in myData: if row == input: return index else : index+=1 

我是新的csv模块,所以请原谅我,如果我是愚蠢的。 谢谢!

编辑 – 我试过每个人的解决scheme,他们都只是返回None。 什么可能是错的? 这是'rU'的标志吗? 因为如果我删除,我得到这个错误 – 对于myData中的行:

 Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode? 

看起来, csv.reader给你每一行作为一个list ,所以你需要索引到该列表中获取string进行比较。

如果您将代码更改为以下内容,您将获得从零开始的索引。

 import csv def find_index(input): o = open('products.csv', 'r') myData = csv.reader(o) index = 0 for row in myData: #print row if row[0] == input: return index else : index+=1 print find_index('d') 

如果您取消print声明,问题将变得明显。

您正在寻找阅读器对象的line_num成员:

 with open('products.csv') as o: myData = csv.reader(o): for row in myData: if row == input: return myData.line_num 

请注意,这is not the same as the number of records returned, as records can span multiple lines. 但是,一般来说,如果您的logging终结符是换行符,它们将是相同的。 如果您需要进一步的帮助,请留下评论。

由于它只是一列,你不需要csv模块,而是尝试这个:

 with open('products.csv') as f: lines = list(i.rstrip() for i in f) for index,value in enumerate(lines): if value == myData: print(index)