如何修复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
相关产品推荐
相关产品推荐

