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

如何读取月球大气成分文本文件并将内容转换为Python字典

月球大气成分数据解析实现方案

现有代码问题分析

  • 仅判断了Helium开头的内容,未处理其他成分条目
  • 没有提前初始化空字典,每次匹配到氦元素时才新建字典,仅能保留最后一次匹配的单个键值对
  • 按空格拆分后按固定索引取值的逻辑兼容性差,遇到「Carbon Dioxide」这类多词名称就会出错
  • 未手动关闭文件对象,存在资源泄漏风险
  • 函数最终返回空值,没有返回构造完成的字典

正确实现代码

def read_file(filename):
    # 初始化空字典存储结果
    res = {}
    # 用with上下文管理器自动处理文件关闭,避免资源泄漏
    with open(filename, 'r', encoding='utf-8') as f:
        for line in f:
            # 跳过无有效成分数据的行
            if 'particles per cubic cm' not in line:
                continue
            # 切出冒号后的所有成分有效内容
            content = line.split(':')[1].strip()
            # 按分号拆分出每个独立的成分条目
            items = content.split(';')
            for item in items:
                item = item.strip()
                if not item:
                    continue
                # 按减号拆分一次,避免名称或数值中存在减号导致拆分错误
                name_part, num_part = item.split('-', 1)
                name = name_part.strip()
                # 数值默认去掉千位逗号转成整数,方便后续计算
                num = int(num_part.strip().replace(',', ''))
                # 如果需要保留数值的字符串格式(保留千位逗号),可替换为下行代码
                # num = num_part.strip()
                res[name] = num
    return res

# 调用测试
atm_data = read_file("atm_moon.txt")
print(atm_data)

运行输出

运行后返回的字典结构如下:

{'Helium 4': 40000, 'Neon 20': 40000, 'Hydrogen': 35000, 'Argon 40': 30000, 'Neon 22': 5000, 'Argon 36': 2000, 'Methane': 1000, 'Ammonia': 1000, 'Carbon Dioxide': 1000}

核心逻辑说明

  • 先通过冒号拆分跳过行首的说明内容,直接拿到所有成分的有效文本
  • 用分号作为分隔符拆分不同的成分,避免多词名称拆分错误
  • 每个成分单独按-拆分一次,分别提取名称和数值,适配不同长度的成分名称

内容的提问来源于stack exchange,提问作者Nicolai Aaker Menken

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:06:01