读取CSV文件时触发IndexError: string index out of range问题求助
解决你的IndexError问题
嘿,作为编程新手遇到这种问题太正常啦,别担心!咱们一步步来搞定这个错误。
首先,先搞懂你遇到的错误:IndexError: string index out of range 这句话的意思是,你尝试访问的位置在字符串里不存在——要么是你以为row是csv模块返回的列表(每列对应一个元素),但实际上它变成了一个字符串;要么就是当前行的内容拆分后根本没到第3列(毕竟列表索引从0开始,row[2]是第3个元素)。
下面是具体的排查和解决步骤:
先确认csv文件本身的问题
打开你的ENV EXPORT TEST.csv文件,检查:- 所有行的列数是不是一致?有没有空行或者格式混乱的行?
- 文件的分隔符是不是逗号?有些csv文件会用分号
;或者制表符\t当分隔符,这会导致csv模块读错。
给代码加调试信息,看清row到底是什么
在你报错的那行前面加个打印语句,看看row的真实模样,比如:# 在portfolio.append(row[2])之前加 print(f"当前行内容:{row},类型:{type(row)},列数:{len(row)}")运行后如果看到
row的类型是<class 'str'>,那就是分隔符没设对,csv模块把整行当成一个字符串了;如果是列表但len(row)小于3,那就是该行内容不够3列。修正你的csv读取代码
这里给你一个更健壮的版本,能处理大部分常见问题:import csv portfolio = [] # 确保文件路径是完整的csv文件名 file_path = 'C:/Users/david/OneDrive/Desktop/CSV/Extracted/ENV EXPORT TEST.csv' with open(file_path, 'r', newline='', encoding='utf-8') as csvfile: # 这里根据你的文件实际分隔符修改,比如是分号就改成delimiter=';' csv_reader = csv.reader(csvfile, delimiter=',') # 如果你的csv第一行是表头(比如列名),先跳过这行 next(csv_reader) # 遍历每一行,同时记录行号方便排查 for line_num, row in enumerate(csv_reader, start=2): # 跳过表头后行号从2开始 print(f"第{line_num}行:{row}") # 先判断列数是否足够,避免报错 if len(row) >= 3: portfolio.append(row[2]) else: print(f"注意:第{line_num}行只有{len(row)}列,跳过该行")
最后给你个新手小技巧:遇到问题时,多打印中间变量,能帮你快速发现哪里和自己预期的不一样,比瞎猜高效多啦!
内容的提问来源于stack exchange,提问作者David Johnson
相关产品推荐
相关产品推荐

