如何读取CSV文件列值并遍历 修复TypeError列表索引报错
报错原因
csv.reader迭代返回的每一行是列表类型,仅支持整数/切片索引,直接用字符串'Date'作为索引取值就会触发你遇到的TypeError: list indices must be integer or slices,not str。- 你的CSV文件使用单引号包裹字段,csv模块默认以双引号作为字段包裹识别符,不额外配置会导致解析出的字段残留多余单引号。
- 目标Date列的单元格内是逗号分隔的多组数字,直接读取只能拿到完整字符串,需要额外做拆分、类型转换、展平才能得到你要的一维数字列表。
修正后可直接运行的代码
import csv # 替换为你的CSV文件实际路径 Filepath = "your_file.csv" date_result = [] # 预定义后续需要的Category、Ability独立存储字典 category_map = {} ability_map = {} with open(Filepath, 'r', newline='', encoding='utf-8') as f: # 指定单引号为字段包裹符,用DictReader直接通过列名取值 csv_reader = csv.DictReader(f, quotechar="'") for row in csv_reader: # 处理Date列:拆分字符串、转整数、追加到结果列表 date_items = [int(num.strip()) for num in row['Date'].split(',')] date_result.extend(date_items) # 同步构建Category、Ability字典,以下以行序号为键示例,可按需调整键规则 row_id = csv_reader.line_num - 2 # 偏移量扣除表头行计数 category_map[row_id] = row['Category'].strip() ability_map[row_id] = [item.strip() for item in row['Ability'].split(',')] print(date_result)
运行以上代码,date_result的输出就是你期望的:
[21, 2, 5, 4, 5, 6]
扩展说明
代码中已经预留了category_map和ability_map两个独立字典的构建逻辑,如果你需要调整字典的键(比如用Date值作为键、用Category名称作为键),直接修改row_id部分的取值规则即可。
内容的提问来源于stack exchange,提问作者Prasanna Balaji
相关产品推荐
相关产品推荐

