
本文详解如何从 CSV 格式文本文件(.txt 扩展名)读取飞机型号与里程数据,动态聚合相同机型的数量与总里程,并以 {"机型": (数量, 总里程)} 的元组形式存入字典。全程使用上下文管理、类型安全转换和增量更新逻辑。
本文详解如何从 csv 格式文本文件(.txt 扩展名)读取飞机型号与里程数据,动态聚合相同机型的数量与总里程,并以 `{"机型": (数量, 总里程)}` 的元组形式存入字典。全程使用上下文管理、类型安全转换和增量更新逻辑。
要实现从纯文本文件构建结构化统计字典的目标,关键在于边读取、边解析、边聚合——而非先转为列表再处理。原代码将整份数据加载为字符串列表(如 ['Cessna,234.1', ...]),虽便于调试,但增加了后续拆分与类型转换的冗余步骤,也易引发索引或格式错误。更优解是逐行处理:打开文件 → 清洗行尾 → 拆分字段 → 转换数值 → 更新字典。
以下为推荐实现(含健壮性增强):
def build_aircraft_stats(filename):
aircraft_dict = {}
try:
with open(filename, "r", encoding="utf-8") as infile:
for line_num, line in enumerate(infile, 1):
line = line.strip()
if not line: # 跳过空行
continue
try:
aircraft, mileage_str = line.split(",", 1) # 仅按第一个逗号分割,防机型名含逗号
aircraft = aircraft.strip()
mileage = float(mileage_str.strip())
if aircraft in aircraft_dict:
count, total = aircraft_dict[aircraft]
aircraft_dict[aircraft] = (count + 1, total + mileage)
else:
aircraft_dict[aircraft] = (1, mileage)
except ValueError as e:
print(f"警告:第 {line_num} 行格式错误(无法解析为 '机型,里程'): '{line}' —— {e}")
continue
except FileNotFoundError:
print(f"错误:文件 '{filename}' 未找到。")
return {}
except Exception as e:
print(f"读取文件时发生未知错误:{e}")
return {}
return aircraft_dict
# 使用示例
result = build_aircraft_stats("aircraft_data.txt")
print(result)
# 输出示例:{'Cessna': (2, 455.4), 'Velocity': (3, 1155.2), 'Beechcraft': (1, 467.2),
# 'Gulfstream': (2, 1229.5), 'Honda': (3, 1304.8), 'Camry': (1, 4.2)}
核心要点说明:
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
- ✅
with open(...)自动资源管理:确保文件无论是否异常都会被正确关闭,避免句柄泄漏; - ✅
split(",", 1)安全分割:限制只切一次,兼容机型名中意外含逗号的场景(如"Honda Jet,412.1"); - ✅ 显式
strip()清理空白:消除换行符、首尾空格导致的键不一致问题(如"Honda "≠"Honda"); - ✅ 逐行异常捕获:单行解析失败不影响整体流程,仅打印警告并跳过,提升程序鲁棒性;
- ✅ 类型强制转换保护:
float()封装在try-except内,防止非数字里程导致崩溃; - ✅ 字典原地更新:直接解包元组
(count, total)并重组新元组,语义清晰、性能高效。
注意事项:
- 若需按机型名称排序输出,可在最后调用
dict(sorted(result.items())); - 如后续需扩展(如计算平均里程),建议改用
collections.defaultdict或collections.Counter配合sum(),但当前需求下原生字典已足够简洁高效; - 生产环境建议使用
pandas.read_csv()处理更大规模数据,但本例纯 Python 实现无依赖、轻量可控,适合教学与中小型脚本。
该方案不仅精准达成 {"Honda": (3, 1304.8)} 的目标结构,更构建了可维护、可复用、具备错误反馈能力的数据处理管道。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










