月底看账单总是一头雾水:“这个月钱都花哪了?”记账 App 广告多、权限多,索性自己写了个极简脚本。

需求很简单
命令行快速记一笔:python jizhang.py 午饭 25
自动记录日期和分类
月底一条命令生成汇总
核心代码(约40行)

import sys, csv, os
from datetime import date
from collections import defaultdict

FILE = "bills.csv"

def add(item, amount):

with open(FILE, "a", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow([date.today(), item, amount])
print(f"已记录:{item} ¥{amount}")

def summary(month):

total = 0
cats = defaultdict(float)
with open(FILE, encoding="utf-8") as f:
    for row in csv.reader(f):
        if row[0].startswith(month):
            total += float(row[2])
            cats[row[1]] += float(row[2])
print(f"{month} 总支出:¥{total:.2f}")
for k, v in sorted(cats.items(), key=lambda x: -x[1]):
    bar = "█" * int(v / total * 20) if total else ""
    print(f"  {k:<8} ¥{v:<8.2f} {bar}")

if name == "__main__":

if sys.argv[1] == "汇总":
    summary(sys.argv[2])
else:
    add(sys.argv[1], float(sys.argv[2]))

效果
2026-06 总支出:¥3218.50
吃饭 ¥1280.00 ████████
交通 ¥420.00 ██
买书 ¥356.00 ██
...
一些感想
这个脚本技术上毫无难度,但带给我两点启发:

解决自己的问题,是最好的学习驱动力。为了加一个“按分类汇总”,我顺手学了 defaultdict 和 argparse;
工具不必完美,能用就行。数据存在 CSV 里想迁移时随时能拿走,反而比某些云同步 App 让我安心。
后续打算加上 matplotlib 画个饼图,学完再来更新。

标签: none

添加新评论