
本文详解如何读取含公司名与多期营收的文本文件,将每行按分号拆分为结构化数据,计算各公司总营收,并准确返回营收最高的公司名称及数值。
本文详解如何读取含公司名与多期营收的文本文件,将每行按分号拆分为结构化数据,计算各公司总营收,并准确返回营收最高的公司名称及数值。
在处理结构化文本数据(如以分号 ; 分隔的公司营收记录)时,关键在于正确解析每行、分离元数据(公司名)与数值数据(各期营收),并进行聚合计算。原始代码存在多个问题:误用制表符 \t 而非分号 ; 拆分、变量名拼写错误(lista_list)、未去除公司名前缀 *、未转换和累加营收数值,也未实现结果提取逻辑。
以下是经过优化、健壮且可直接运行的解决方案:
def company_with_max_revenue(filename):
"""
从指定txt文件中读取公司营收数据,返回总营收最高的公司及其营收总额。
文件格式要求:每行形如 "*Company X;rev1;rev2;rev3..."
公司名以 '*' 开头,后续字段均为整数营收值。
"""
data = [] # 存储 (总营收, 公司名) 元组
with open(filename, 'r', encoding='utf-8') as f:
for line in f:
line = line.strip()
if not line: # 跳过空行
continue
parts = line.split(';')
if len(parts) <p><strong>核心要点说明:</strong> </p>
- ✅ 正确拆分:使用 line.split(';') 获取所有字段,而非错误的 \t;
- ✅ 解包技巧:company, *revenues = parts 是简洁写法,但显式索引(parts[0], parts[1:])更清晰、容错性更强;
- ✅ 前缀处理:用 .lstrip('*') 安全移除可能存在的一个或多个 *,避免硬编码切片风险;
- ✅ 类型转换与求和:int(val) 确保整数运算(题目中均为整数,无需 float);生成器表达式 sum(...) 高效且内存友好;
- ✅ 异常防护:捕获 ValueError 处理非数字营收,跳过坏行并提示,避免程序中断;
- ✅ 结果提取:使用 max(..., key=...) 直接获取最大值元组,比 sorted()[-1] 更高效(时间复杂度 O(n) vs O(n log n));
- ✅ 健壮性增强:检查空行、字段数不足、文件不存在等边界情况。
运行此代码,输入示例数据后将精准输出:
The biggest revenue: Company 3 The revenue is: 34000
该方案兼具可读性、健壮性与生产可用性,适用于真实业务场景中的简单营收分析任务。










