使用csv.reader读取CSV文件时line_num属性始终返回0的问题求解
问题根源
你的代码核心错误是遍历对象不匹配:
- 你已经通过
csv.reader(f)生成了结构化的CSV读取对象csv_f,但后续循环直接遍历原始文件对象f,导致获取的row是未拆分的单行字符串,你调用row[2]实际是取字符串的第三个字符,而非CSV文件的第三列值,自然匹配不到"H"的条件,返回空集合。 - 只有遍历
csv_f对象时,csv_f.line_num才会自动递增计数,遍历f时该值始终停留在初始值0,这就是你测试代码输出大量0的原因。 - 额外问题:你要实现的是存入集合,但代码中用的是列表的
append()方法,不符合需求。
修复后代码
import csv indexofH = set() # 按需求初始化集合 with open('file.csv', 'r', encoding='utf-8') as f: csv_f = csv.reader(f) # 遍历csv读取器而非原始文件对象 for row in csv_f: # 增加边界判断,避免行长度不足3导致索引报错 if len(row) >=3 and row[2] == "H": indexofH.add(csv_f.line_num) # 集合用add方法存入元素 print(indexofH)
如果需要用列表存储行号,把初始化的set()改成[],add方法改成append即可。
内容的提问来源于stack exchange,提问作者MatthewM775
相关产品推荐
相关产品推荐

