CSV读取触发IndexError: list index out of range错误求助
问题解决:CSV读取时IndexError问题
原始CSV文件内容(data_counter_1.csv)
N;52201261;EM3000v2;2.0;20210801000000;20210801010000;20210801010000;51.28983;15.22345;172.19.224.70;0.0.0.0;ns; C;20210801000500;127;51.28984;15.22344;127;0;0000000000000;3880356.4*kWh;978928.9*kWh;127;0.6*kWh;0.0*kWh;127; C;20210801001000;127;51.28984;15.22345;127;0;0000000000000;3880357.0*kWh;978928.9*kWh;127;0.6*kWh;0.0*kWh;127; C;20210801001500;127;51.28984;15.22344;127;0;0000000000000;3880357.6*kWh;978928.9*kWh;127;0.6*kWh;0.0*kWh;127; C;20210801002000;127;51.28984;15.22344;127;0;0000000000000;3880358.2*kWh;978928.9*kWh;127;0.6*kWh;0.0*kWh;127;
原始代码
import csv from openpyxl import Workbook workbook = Workbook() worksheet = workbook.active with open('data_counter_1.csv', 'r') as file: reader = csv.reader(file, delimiter=';') for row in reader: if row[0] == 'N': const_value = row[1] elif row[0] == 'C': row_data = [const_value, row[1], row[8], row[9], row[3], row[4]] worksheet.append(row_data) workbook.save('output_counter_1.xlsx')
错误原因
出现IndexError: list index out of range的核心原因是CSV文件中存在空行,csv.reader会将空行解析为空列表,此时访问row[0]自然会触发索引越界错误。另外还存在潜在问题:如果文件中没有N行,后续访问const_value会触发变量未定义错误。
修正后的代码
import csv from openpyxl import Workbook workbook = Workbook() worksheet = workbook.active # 初始化const_value,避免无N行时的未定义错误 const_value = "" with open('data_counter_1.csv', 'r') as file: reader = csv.reader(file, delimiter=';') for row in reader: # 跳过空行或列数不足的无效行 if not row or len(row) < 2: continue if row[0] == 'N': const_value = row[1] elif row[0] == 'C': # 确保C行有足够的列数再提取数据 if len(row) >= 10: row_data = [const_value, row[1], row[8], row[9], row[3], row[4]] worksheet.append(row_data) workbook.save('output_counter_1.xlsx')
关键修改点
- 增加空行和无效行判断:
if not row or len(row) < 2: continue,避免访问空列表的索引 - 初始化
const_value为默认值,防止文件中没有N行时出现变量未定义错误 - 处理C行的列数检查:
if len(row) >= 10:,确保要提取的列索引存在
内容的提问来源于stack exchange,提问作者Przemek D
相关产品推荐
相关产品推荐

