Python读取txt文件打印时报IndexError: list index out of range如何解决
问题原因分析
你的报错是多个问题共同导致的:
- 直接触发
IndexError的原因:你读取到文件末尾的空行(大部分txt文件末尾会默认带一个空行)时,split(',')得到的列表长度不足4,访问content[3]就会触发越界 - 其他隐性问题:
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
相关产品推荐
相关产品推荐

