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

2 投票
3 回答
27291 浏览
提问于 2025-04-17 21:45

我一直在寻找解决办法,但还没有找到。所以,我想找出我csv文件中特定输入的行号。例如,假设这是我正在解析的csv文件 -

a
b
c
d

这个文件有100行和1列。我输入“d”,应该得到4。我试过这个代码,但它给我返回了None -

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模块还不太熟悉,所以如果我说错了,请多多包涵。谢谢!

补充 - 我试过大家的解决方案,但都返回了None。可能哪里出错了?是'rU'这个标志的问题吗?因为如果我去掉它,就会出现这个错误 -

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

3 个回答

1

因为这里只有一列数据,所以你不需要使用 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)
7

你在找的是读取器对象的 line_num 成员:

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

重要提示:

请注意,这个 并不等同于返回的记录数量,因为一条记录可能跨越多行。 不过,通常情况下,如果你的记录结束符是换行符,它们会是相同的。如果你需要更多帮助,可以留言。

3

看起来,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 这一行的注释去掉,问题就会变得很明显。

撰写回答