我一直在寻找解决方案,但我还没找到。所以,我试图在我的csv文件中找到特定输入的行号。例如,让这是我正在解析的csv文件 -
a
b
c
d
这是一个包含100行和1列的文件。所以我在输入“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模块的新手,所以如果我是傻瓜,请原谅我。谢谢!
编辑 - 我尝试了每个人的解决方案,所有人都只返回无。可能有什么不对?它是'rU'标志吗?因为如果删除它,我会收到此错误 - 对于myData中的行:
Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
答案 0 :(得分:5)
您正在寻找读者对象的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.
但是,通常,如果您的记录终结符是换行符,它们将是相同的。如果您需要进一步的帮助,请发表评论。
答案 1 :(得分:2)
csv.reader
似乎为每行提供list
,因此您需要索引该列表以获取要进行比较的字符串。
如果您将代码更改为以下内容,您将获得从零开始的索引。
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
语句,问题就会变得很明显。
答案 2 :(得分:0)
由于它只有一列,因此您不需要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)