Python读取txt文件按制表符分割失效触发IndexError如何解决?
错误原因
- 分隔符匹配错误:你代码中使用
split("\t")按制表符分割每行内容,但你提供的txt文件里日期与数值之间的分隔符是两个空格,并非制表符。调用split("\t")后每行只会生成仅有1个元素的列表,此时访问temp[1]自然触发IndexError索引越界。你看到的所谓"第一行被存入列表"只是报错前的输出缓存,实际上代码在处理第一行时就已经触发错误,没有执行到列表追加的步骤。 - 变量名使用不规范:你将函数参数、文件对象都命名为
file,还使用Python内置关键字list作为自定义列表的变量名,这类命名冲突会引发不可预期的运行异常,属于错误的编码习惯。 - 逻辑不符合需求:现有代码即使跑通,返回的是每行分割后的子列表组成的二维列表,和你需要的「仅返回右列数值的一维列表」需求不匹配。
修复后的可用代码
def readfile(file_path): result = [] with open(file_path, encoding="utf-8") as f: for row in f: # 先去除行首尾的换行、多余空白,再按任意空白分割,适配多种分隔符场景 parts = row.strip().split() # 提取右列数值,转换为浮点型后存入结果列表 result.append(float(parts[1])) return result
修复说明
- 替换了所有冲突的变量名,避免和Python内置关键字、函数参数重名引发异常
- 改用无参数的
split()方法,会自动按任意空白(单个/多个空格、制表符等)分割内容,完全适配你当前的文件格式,也兼容后续分隔符变更的场景 - 提前调用
strip()处理整行内容,可以过滤行首尾的换行、空白字符,避免空行或者带首尾空白的行触发错误 - 直接提取右列内容并转换为浮点型,符合你需要数值列表的使用需求
内容的提问来源于stack exchange,提问作者dacritical
相关产品推荐
相关产品推荐

