Python 统计 CSV 销售额前 10 名:一份可直接运行的汇总脚本与三个常见坑

举报
yd_259061519 发表于 2026/11/06 15:19:59 2026/11/06
【摘要】 用 Python 读取 CSV 按产品汇总销售额并输出前 10 名:给出可直接运行的脚本与 DevSpace 运行步骤,以及 BOM 编码、金额格式、脏数据三个常见坑。

日常工作中经常遇到这样的需求:手头有一份销售明细 CSV,想快速知道哪些产品卖得最好。今天在华为云 AI 开发者空间(DevSpace)体验版里实测了这个任务,记录一份能直接运行的脚本和三个容易踩的坑。

一、数据长什么样

假设文件是 sales.csv,表头三列:产品、销售额、日期,例如:

产品,销售额,日期
无线耳机,1299.00,2026-11-01
机械键盘,899.50,2026-11-02
无线耳机,1299.00,2026-11-03

目标是按产品汇总销售额,输出排名前 10 的产品。

二、完整脚本

import csv
from collections import defaultdict


def clean_amount(text):
    text = (text or "").strip().replace(",", "").replace("¥", "").replace("元", "")
    return float(text) if text else 0.0


def top_products(csv_path, top_n=10):
    totals = defaultdict(float)
    with open(csv_path, encoding="utf-8-sig", newline="") as f:
        reader = csv.DictReader(f)
        for row in reader:
            product = (row.get("产品") or "").strip()
            if not product:
                continue
            try:
                totals[product] += clean_amount(row.get("销售额", ""))
            except ValueError:
                continue
    return sorted(totals.items(), key=lambda kv: kv[1], reverse=True)[:top_n]


if __name__ == "__main__":
    for i, (name, total) in enumerate(top_products("sales.csv"), start=1):
        print(f"{i:>2}. {name:<12} {total:>12,.2f}")

三、在 DevSpace 里怎么运行

  1. 把 sales.csv 和脚本放在同一个工作目录,例如 /root/workspace;
  2. 打开终端,执行 python3 sales_summary.py;
  3. 输出示例:
 1. 无线耳机      2,598.00
 2. 机械键盘        899.50

四、三个常见坑

1. 编码带 BOM,表头读出来是乱码。 Excel 导出的 CSV 常带 UTF-8 BOM,用 encoding="utf-8" 打开时第一列列名会变成 \ufeff产品,row.get("产品") 永远取不到值。改成 utf-8-sig 可以自动去掉 BOM。

2. 金额里有千分位逗号或货币符号。 float("1,299.00") 会直接报错。先去掉逗号、¥、元 再转换;转换失败的行跳过并计数,不要让整批数据因为一行脏数据中断。

3. 空行和缺失值。 明细里常有空行或产品名为空的行,product 为空就跳过;销售额 为空按 0 处理。另外注意表头重复或多余空格,先用 strip() 处理列名和取值。

五、发布前的核查清单

  • 用 print(reader.fieldnames) 先确认表头确实是 ['产品', '销售额', '日期'];
  • 汇总总金额与原始明细求和核对一次;
  • 排序用金额倒序,不要按字符串排序,否则 900 会排在 1000 前面。

这个小脚本只有几十行,但把编码、金额格式和脏数据三处处理好,就可以放心地用在日常报表里了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。