本节摘要:写任何功能之前先问一句:这轮子是不是早有人造好了?本节先逛标准库——随解释器自带的官方零件库,重点演示轻记账马上要用的 datetime、csv、os 三个模块;再讲第三方库与标准库的分界:什么时候直接用官方的,什么时候值得引入外部依赖。轮子意识决定开发效率,也决定项目的依赖体积。
阅读完本节,你应当能够:
轻记账刚学会把数据存进 JSON 文件(2.1),马上冒出三个新需求:每笔账自动记日期、能导出成 Excel 能开的表格、数据文件最好放在固定位置而不是脚本旁边。这三件事 if 分支和 while 循环帮不上忙——它们属于系统交互:日期、文件系统、数据格式。而这些恰是标准库的主场。Python 一贯的哲学"自带电池"在本节具象化:不装任何东西,import 就能用两百多个模块。

from datetime import date, datetime today = date.today() print(today) # 2026-09-02 print(today.strftime("%Y年%m月%d日")) # 2026年09月02日 now = datetime.now() print(now.isoformat()) # 2026-09-02T14:30:05.123456 —— 存库常用
strftime 里的占位符记三个就够日常用:%Y 四位年、%m 两位月、%d 两位日。日期对象之间能直接比较和相减,"算这个月花了多少"就是比较月份前缀或做日期范围过滤:
record_date = date(2026, 9, 1) print(record_date < today) # True print((today - record_date).days) # 1 —— 相差一天
JSON 是给程序读的,csv 是给人读的——Excel 双击就能打开:
import csv ledger = [ {"item": "早饭", "amount": 12.5, "date": "2026-09-01"}, {"item": "地铁", "amount": 4.0, "date": "2026-09-01"}, ] with open("export.csv", "w", newline="", encoding="utf-8-sig") as f: writer = csv.DictWriter(f, fieldnames=["date", "item", "amount"]) writer.writeheader() writer.writerows(ledger)
两个不写就出事的细节:newline="" 防止 Windows 下出现空行;编码用 utf-8-sig 让 Excel 正确识别中文。导出的表格第一行是 date、item、amount 三列标题,下面每行一笔账——这就是给家人看的"报表"。
轻记账将来要用 Web 框架、数据库连接池,这些标准库没有或不好用,得引入第三方库(下一节讲怎么装)。取舍的尺子有三条:
from datetime import date import csv def add_record(ledger, item, amount): ledger.append({ "item": item, "amount": amount, "date": date.today().isoformat(), # 自动打上当天日期 }) def export_csv(ledger): with open("export.csv", "w", newline="", encoding="utf-8-sig") as f: writer = csv.DictWriter(f, fieldnames=["date", "item", "amount"]) writer.writeheader() writer.writerows(ledger) print("已导出 export.csv") def month_total(ledger, month): # month 形如 "2026-09" return sum(r["amount"] for r in ledger if r["date"].startswith(month)) ledger = [] add_record(ledger, "早饭", 12.5) print(month_total(ledger, "2026-09")) # 12.5
变式一:加"统计"指令,输入月份输出该月总额与笔数。变式二:用 os.path.join 把数据文件定位到用户目录下的专属文件夹,体会"路径交给库拼,不手工拼字符串"的稳健。
官方零件用上了,第三方零件怎么装、怎么不让多个项目打架?下一节讲 pip 与虚拟环境。