Python读取CSV指定行列值触发Index Error的问题解决
解决CSV读取时的索引越界问题
错误原因
原代码在循环每一行时就立刻尝试访问data[2],但循环第一次执行时,data里只添加了第一行数据,长度为1,最大索引是0,自然会触发「Index Error: list index out of range」。另外示例CSV里存在空行,读取时会被当成空列表,也会干扰索引定位。
修正方案
方案1:先读取所有有效行再取值
先把CSV里的非空行全部存入列表,再直接访问目标行(注意Python列表索引从0开始,第二行对应索引1,第1列是索引0,第2列是索引1):
import csv with open("data.csv", "r") as source: reader = csv.reader(source) # 过滤空行,只保留有数据的行 data = [row for row in reader if row] # 获取第二行第1、2列(对应示例里的"Pear"和"23") result1 = data[1][0].strip() # strip()清除单元格多余空格 result2 = data[1][1].strip() print(result1, result2)
方案2:直接定位目标行,无需存储所有行
如果只需要第二行数据,可以直接跳过第一行和空行,读取目标行:
import csv with open("data.csv", "r") as source: reader = csv.reader(source) target_row = None line_count = 0 for row in reader: # 跳过空行 if not row: continue line_count += 1 if line_count == 2: target_row = row break if target_row: result1 = target_row[0].strip() result2 = target_row[1].strip() print(result1, result2)
补充说明
- 示例CSV里的单元格带有多余空格,用
strip()可以清除,避免输出内容带空格(比如原数据里的" 23"会变成"23")。 - 原代码的索引逻辑错误:第二行对应列表索引
1,第1列是索引0,第2列是索引1,别搞混了。
内容的提问来源于stack exchange,提问作者dam's
相关产品推荐
相关产品推荐

