如何在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)