从TXT文件提取销售数据并按销售额排序的Python代码问题
解决提取销售数据并排序输出的问题
原代码问题分析
- 错误代码中,
split('(')得到的amount是包含销售额与冗余字符的字符串(比如类似"500 sold)"),直接遍历amount的字符会将每个字符单独输出,完全偏离提取销售额的目标。 - 未先收集所有商品与销售额数据,排序操作需要基于完整数据集,零散处理无法实现排序需求。
修正后的代码实现
# 存储商品与销售额的列表 sales_data = [] with open('myfile.txt', 'rt') as myfile: for myline in myfile: # 筛选包含销售数据的行 if "sold" in myline: # 分割商品名和销售额所在片段 item_part, amount_part = myline.split('(') # 清理商品名的换行符与多余空格 item = item_part.strip() # 提取销售额数值(假设格式为"XXX sold)",按空格分割取第一个元素转整数) amount = int(amount_part.split()[0]) # 将数据存入列表,用于后续排序 sales_data.append((amount, item)) # 按销售额降序排序(若要升序,去掉reverse=True即可) sorted_data = sorted(sales_data, key=lambda x: x[0], reverse=True) # 按要求格式带索引输出商品名 for idx, (_, item) in enumerate(sorted_data, start=1): print(f"{idx}- {item}")
代码说明
- 数据收集:先通过列表
sales_data存储所有商品对应的销售额与名称,确保排序基于完整数据集。 - 销售额提取:通过
split()从片段中分离出数字部分并转为整数,保证排序逻辑的正确性。 - 排序逻辑:使用
sorted()的key参数指定按销售额排序,reverse=True实现从高到低的降序排列。 - 索引输出:
enumerate的start=1参数让索引从1开始,匹配预期的输出格式。
格式适配说明
如果TXT中销售额格式不同(比如括号内是"sold: 500"),只需调整销售额提取逻辑:
# 适配"(sold: 500)"格式 amount = int(amount_part.split(':')[1].strip())
内容的提问来源于stack exchange,提问作者Mary E
相关产品推荐
相关产品推荐

