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

如何修复Python提取输入文件两列数据时的索引异常问题?

问题修复方案

你的问题出在两个核心点:

  • 用split(' ')按单个空格分割,而输入文件的列是多个空格/制表符分隔的,导致分割结果完全不符合预期,甚至把整行内容误当成单个元素存入列表
  • 代码只处理了name列表,完全没实现income的存储逻辑

修正后的基础版代码

name = []
income = []

with open('region-income.dat') as f:
    # 跳过前8行,遍历剩余有效行
    for line in f.readlines()[8:]:
        # 先去掉首尾空白,再用默认split()分割任意数量的空白字符(多空格、制表符都适配)
        parts = line.strip().split()
        # 过滤空行或格式错误的行,避免索引越界
        if len(parts) >= 2:
            name.append(parts[0])
            income.append(parts[1])

print(name)
print(income)

关键细节说明

  • line.strip():先清除每行首尾的换行符、多余空格,避免分割出无效的空字符串
  • split():不带参数时会自动识别任意数量的空白字符作为分隔符,完美匹配你的输入文件格式
  • 增加len(parts)>=2判断:防止文件中存在空行或格式异常的行导致程序报错

适配含空格的地区名称(进阶版)

如果你的地区名称包含空格(比如"South Dakota"),上面的方法会拆分名称,这时候可以用正则匹配提取:

import re

name = []
income = []

with open('region-income.dat') as f:
    for line in f.readlines()[8:]:
        # 正则匹配:前面是非数字的地区名,后面是数字格式的收入
        match = re.match(r'([^\d]+)\s+(\d+)', line.strip())
        if match:
            name.append(match.group(1).strip())
            income.append(match.group(2))

print(name)
print(income)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:35:29