Python读取txt文件绘图遇IndexError: list index out of range问题求助
解决IndexError问题并正确读取数据绘图
你的问题出在数据格式和代码读取逻辑不匹配,导致程序无法正确解析(x,y)数据对,进而抛出IndexError: list index out of range。
错误原因分析
你的txt文件里所有数据是一整行(或多行混合空白),每个(x,y)数据对之间用空格分隔,而每个对内部用逗号分隔;但你的代码用csv.reader按逗号拆分内容,并且默认每行是一个(x,y)对,这就导致:
csv.reader会把单行数据拆成一个很长的列表,其中大部分元素是类似"1.5 2.24425"这样的混合字符串,不是单独的x/y值;- 如果文件里存在空白行,或者拆分后出现空元素,循环中取
row[0]或row[1]时就会触发索引越界错误。
修正后的代码
我们可以直接读取整个文件内容,先按空白分割出所有数据对,再逐个解析x和y值:
import matplotlib.pyplot as plt x = [] y = [] with open('raneen.txt', 'r') as file: # 读取全部内容,去除首尾空白,按任意空白(空格/换行)分割成单个数据对 data_pairs = file.read().strip().split() for pair in data_pairs: # 分割每个数据对的x和y,处理可能存在的前后空格 x_str, y_str = pair.strip().split(',') # 转换为浮点数(支持科学计数法如984.851E-03) x.append(float(x_str)) y.append(float(y_str)) # 绘图部分保持不变 plt.plot(x, y, label='Loaded from file!') plt.xlabel('x') plt.ylabel('y') plt.title('Interesting graph\nCheck it out') plt.legend() plt.show()
额外说明
- 这段代码会自动处理文件中的换行、多余空格等问题,无需担心数据格式的小瑕疵;
- Python的
float()函数可以直接解析你数据中的科学计数法格式(比如984.851E-03),不需要额外处理; - 如果你的txt文件后续调整为每行一个数据对,只需把读取逻辑换成按行遍历后拆分逗号即可,但从你提供的数据来看,当前格式用上述代码最适配。
内容的提问来源于stack exchange,提问作者MohammedALNasrawi
相关产品推荐
相关产品推荐

