Python基于CSV构建航天任务统计字典的实现求助
现有代码的核心问题
- 切片索引逻辑错位:
line.split(",")[1:7]取的是索引1到6的字段范围,既没覆盖到后续要取的状态字段,后续代码里取val[7]必然触发索引越界报错 - 引用未定义变量:代码里写了
print(msg.format(val[1], val[7])),但整个函数里根本没有定义msg变量,运行会直接抛出NameError - 统计逻辑完全不符合需求:没有给每个公司维护三个计数维度,直接给字典的键赋值会覆盖原有值,根本做不到累加统计
- 语法层级错误:
try块比函数体的注释缩进多了一级,运行时Python会直接抛出缩进异常 - 流程遗漏:没有跳过CSV的表头行,会把列名当成有效任务数据算进统计结果
- 异常捕获不规范:裸写
except会吞掉所有类型的报错,出问题根本定位不到原因
修复完成的可运行代码
import csv def space_statistics(filename): ''' 统计各公司航天任务数据,返回固定格式字典:{公司名: [总任务数, 成功任务数, 失败任务数]} ''' space_stats = {} try: with open(filename, 'r', encoding='utf-8') as file_handle: csv_reader = csv.reader(file_handle) # 跳过CSV表头行 next(csv_reader) for row in csv_reader: # 匹配样例CSV的列位置:公司在第2列(索引1),任务状态在最后一列 company_name = row[1].strip() mission_result = row[-1].strip() # 首次遇到该公司时初始化计数列表 if company_name not in space_stats: space_stats[company_name] = [0, 0, 0] # 累加总任务数 space_stats[company_name][0] += 1 # 按任务结果累加对应计数 if mission_result == "Success": space_stats[company_name][1] += 1 elif mission_result == "Failure": space_stats[company_name][2] += 1 return space_stats except FileNotFoundError: print("Error: 传入的文件路径不存在,请检查文件位置") except IndexError: print("Error: CSV列结构不匹配,请核对字段对应的索引位置")
注意事项
- 不要手动用
split(",")拆分行内容:如果CSV的字段本身包含逗号(比如任务载荷名称里的分隔符),手动拆分会把一个字段拆成多段,导致统计错误,用内置csv.reader处理更可靠 - 如果运行后发现取值不对,可以先打印前3行的
row内容,根据实际列顺序调整对应的索引值,比如公司名在第3列就把row[1]改成row[2] - 函数返回的字典完全符合要求的格式,每个键是公司名,对应的值是长度为3的列表,依次存放总任务数、成功任务数、失败任务数
内容的提问来源于stack exchange,提问作者Miamdeschips
相关产品推荐
相关产品推荐

