You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历CSV行时出现‘list’ object has no attribute ‘items’错误求助

解决CSV读取时的AttributeError: 'list' object has no attribute 'items'

这个问题很常见——你用了csv.reader来读取文件,但它返回的每一行是列表类型,而items()是字典专属的方法,所以才会触发这个错误。结合你的需求(生成filename:value的列表),给你两种靠谱的解决方案:

方案1:改用csv.DictReader(推荐,代码更直观)

csv.DictReader会自动把CSV的第一行作为表头,后续每一行都返回一个字典,键是表头名称,值是对应列的内容,这样就能直接用键来取值,不用记索引:

import csv

# 用来存储最终的filename:value列表
filename_value_pairs = []

with open('faces.csv', 'r') as csvfile:
    # 初始化DictReader,自动识别表头
    faces_reader = csv.DictReader(csvfile)
    for row in faces_reader:
        # 直接通过表头键获取对应值
        filename = row['filename']
        value = row['value']
        filename_value_pairs.append(f"{filename}:{value}")

# 打印结果验证
for pair in filename_value_pairs:
    print(pair)

运行这段代码后,你会得到预期的输出:

image163.jpeg:6541546.633
image206.jpeg:5873455.229
image206.jpeg:5793978.982
image207.jpeg:6978847.211
image265.jpeg:6443535.129

方案2:继续用csv.reader,通过索引取值

如果坚持用csv.reader,可以先读取表头行,找到filename和value对应的列索引,再遍历后续行通过索引取值:

import csv

filename_value_pairs = []

with open('faces.csv', 'r') as csvfile:
    faces_reader = csv.reader(csvfile)
    # 读取第一行作为表头
    headers = next(faces_reader)
    # 找到filename和value对应的索引(避免硬编码索引,更灵活)
    filename_index = headers.index('filename')
    value_index = headers.index('value')
    
    for row in faces_reader:
        filename = row[filename_index]
        value = row[value_index]
        filename_value_pairs.append(f"{filename}:{value}")

# 输出结果
for pair in filename_value_pairs:
    print(pair)

两种方案的区别

  • csv.DictReader代码可读性更高,适合表头固定、需要清晰关联键值的场景;
  • csv.reader性能略优(差异极小,大部分场景可忽略),适合处理超大CSV或需要手动控制列索引的场景。

内容的提问来源于stack exchange,提问作者Tom Bar-Gal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:22:30