不用手动打开 Excel:用 Python 读取 CSV,几秒钟统计一份销售报表
CSV 是一种常见的数据交换格式,Excel、数据库和许多网站都支持导入或导出 CSV 文件。如果只是想读取表格、统计数量或计算金额,不一定需要使用复杂的数据分析软件。
今天,我们就用 Python 自带的 csv 模块完成一个实用的小工具。
一、认识 CSV 文件
CSV 是 Comma-Separated Values(逗号分隔值)的缩写。它本质上是一种文本文件,每一行代表一条记录,不同字段通常使用逗号分隔。
例如,一份简单的销售记录:
商品,数量,单价
笔记本,3,12.50
签字笔,5,2.80
文件夹,2,8.00
可以看到,第一行是表头,后面每一行代表一条商品销售记录。
CSV 文件有几个特点:
- 文件体积通常比较小,方便传输。
- 可以使用 Excel、WPS 或普通文本编辑器打开。
- 不依赖特定表格软件,适合不同系统之间交换数据。
- 可以通过编程自动读取和处理。
需要注意,CSV 并不一定只能使用简单的逗号分隔。字段中如果包含逗号、引号或换行符,也可能需要使用引号进行包装。因此,建议使用专门的 CSV 解析工具,而不是直接用字符串的 split(",") 拆分。
二、准备 Python 程序
首先,在电脑上创建一个文件夹,例如 csv-demo。
在文件夹中创建两个文件:
csv-demo/
├── sales.csv
└── summarize.py
把前面的销售数据保存到 sales.csv 中,注意使用 UTF-8 编码保存。
接下来,打开 summarize.py,开始编写统计程序。
三、使用 DictReader 读取表格
Python 内置了 csv 模块,其中的 DictReader 非常适合初学者。
它能够自动读取 CSV 第一行的字段名称,并把每一行转换成字典。这样,我们就可以直接通过商品名称、数量和单价来获取数据,不必记住每一列的位置。
先看一个简单示例:
import csv
with open("sales.csv", newline="", encoding="utf-8-sig") as file:
reader = csv.DictReader(file)
for row in reader:
print(row["商品"], row["数量"], row["单价"])
运行后,会依次输出:
笔记本 3 12.50
签字笔 5 2.80
文件夹 2 8.00
这里有三个值得注意的地方:
import csv:导入 Python 自带的 CSV 模块。csv.DictReader(file):读取表格,并将每一行转换为字典。row["商品"]:通过表头名称获取对应字段。
为什么使用 newline=""?这是 Python 官方推荐的 CSV 文件打开方式,可以避免部分换行符处理问题。
这里还使用了 utf-8-sig 编码,它能够在读取 UTF-8 文件时自动跳过文件开头可能存在的 BOM 标记,减少部分 Excel 导出文件出现表头乱码的问题。
四、实战:自动计算商品销售总额
现在,我们把读取数据和金额计算结合起来,制作一个简单的销售统计程序。
修改 summarize.py,完整代码如下:
import csv
from decimal import Decimal
total = Decimal("0")
with open("sales.csv", newline="", encoding="utf-8-sig") as file:
reader = csv.DictReader(file)
for row in reader:
name = row["商品"]
quantity = int(row["数量"])
price = Decimal(row["单价"])
amount = quantity * price
total += amount
print(f"{name}:{amount:.2f} 元")
print("----------------")
print(f"销售总额:{total:.2f} 元")
这段程序主要完成四件事:
- 读取每一行商品数据。
- 将数量转换为整数,将单价转换为金额数值。
- 计算每种商品的销售金额。
- 累加所有商品金额,输出最终销售总额。
这里特别使用了 Decimal,而不是普通的 float。因为涉及金额计算时,十进制运算通常更适合表示货币数值,可以避免部分二进制浮点数精度问题。
运行程序:
python summarize.py
预期输出:
笔记本:37.50 元
签字笔:14.00 元
文件夹:16.00 元
----------------
销售总额:67.50 元
这样,一份简单的销售报表就自动统计完成了。
五、遇到问题怎么办?
初次处理 CSV 文件时,可能遇到以下几个常见问题:
1. 找不到文件
如果出现 FileNotFoundError,先检查 sales.csv 是否与 Python 程序位于同一目录。如果不在,需要修改文件路径。
2. 找不到字段名称
如果出现 KeyError,检查 CSV 第一行的表头是否与代码中的字段名称完全一致。例如,商品 和 商品名称 就是两个不同的字段。
3. 中文显示乱码
可以检查文件实际使用的编码。如果文件是 UTF-8 编码,可以尝试使用 utf-8-sig;如果来自其他软件,也需要根据实际编码选择相应的读取方式。不要在不了解文件编码的情况下随意切换。
4. 金额计算报错
检查数量和单价是否为空,是否包含非数字字符,以及小数点格式是否正确。真实业务数据通常需要额外进行数据校验,不能假设每一行都完整无误。
六、还能用它做什么?
掌握 CSV 读取之后,你还可以进一步扩展:
- 统计每个月的支出和收入。
- 汇总不同商品的销售数量。
- 计算员工考勤和工作时长。
- 整理网站导出的用户数据。
- 批量筛选符合条件的记录。
对于更复杂的数据分析,还可以进一步学习 Pandas。但对于简单的数据读取、统计和转换,Python 自带的 csv 模块已经足够实用。
总结: CSV 是日常工作中非常常见的数据格式,学会使用 Python 的 csv.DictReader 和 Decimal,就能把许多重复的表格统计工作交给程序自动完成,让数据处理变得简单又高效。
- 点赞
- 收藏
- 关注作者
评论(0)