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

时间:2014-03-11 08:48:54

标签: python excel csv

我一直在寻找解决方案,但我还没找到。所以,我试图在我的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?

3 个答案:

答案 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)