如何读取月球大气成分文本文件并将内容转换为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
相关产品推荐
相关产品推荐

