You need to enable JavaScript to run this app. Python基于CSV构建航天任务统计字典的实现求助
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 06:45:05