You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取txt文件打印时报IndexError: list index out of range如何解决

问题原因分析

你的报错是多个问题共同导致的:

  1. 直接触发IndexError的原因:你读取到文件末尾的空行(大部分txt文件末尾会默认带一个空行)时,split(',')得到的列表长度不足4,访问content[3]就会触发越界
  2. 其他隐性问题:format方法里传了5个参数(content[0]到content[3]加换行符),但格式化字符串只有4个占位符,换行符没有被正确插入;另外你原代码末尾的file.close没加括号,实际没有执行文件关闭操作,可能会导致资源泄漏。
解决方法

不需要提前告知Python文件行数,用更安全的逐行读取逻辑即可适配任意行数的文件,同时可以实现数据存入列表的需求:

修正后代码示例

import sys
# 存储客户数据的列表
customer_list = []

# 用with上下文管理器自动管理文件,不需要手动写close
with open('customers.txt', 'r', encoding='utf-8') as file:
    # 直接迭代文件对象逐行读取,自动在文件末尾终止
    for line in file:
        # 先去除每行首尾的空白符(换行、多余空格)
        stripped_line = line.strip()
        # 跳过空行,避免越界
        if not stripped_line:
            continue
        # 分割后再去除每个字段前后的空格
        content = [item.strip() for item in stripped_line.split(',')]
        # 校验字段数量,跳过格式错误的行避免崩溃
        if len(content) != 4:
            print(f"跳过格式异常行:{stripped_line}")
            continue
        # 格式化输出,把换行符放到格式化字符串末尾
        sys.stdout.write('{:<4}{:>12}{:>18}{:>9}\n'.format(content[0], content[1], content[2], content[3]))
        # 将数据存入列表,可根据需求存子列表或者字典
        # 存字典的写法(方便后续按字段名取值):
        customer_list.append({
            "客户ID": content[0],
            "姓名": content[1],
            "状态": int(content[2]),
            "余额": int(content[3])
        })
        # 如果只需要存子列表:customer_list.append(content)
常见疑问说明
  • 未知行数的文件处理:上述代码用for line in file的迭代读取方式,会自动在读取到文件末尾时终止,不需要提前知道行数,适配任意长度的合法文件
  • 数据列表使用:代码中的customer_list就是存储了所有客户信息的列表,后续需要操作数据时直接遍历该列表即可,不需要重复读取文件

内容的提问来源于stack exchange,提问作者zedkpea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:06:03