如何在Python中找到CSV文件中特定项的行号?
我一直在寻找解决办法,但还没有找到。所以,我想找出我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
这一行的注释去掉,问题就会变得很明显。