大家好!我是CSDN的Python新手博主~ 上一篇分享了「文件整理小工具」,很多小伙伴说跟着实操后收获满满,这次继续带来新手友好的实战项目——「个人记账小工具」!
日常记账总是记了就忘?Excel表格整理太麻烦?这个工具能帮你快速记录收支、查询明细、统计月度收支,全程用基础Python语法实现,适合刚学完文件操作的新手巩固知识,同时解决实际需求~
一、本次学习目标
- 掌握Python文件读写的核心用法(
open()函数、读写模式) - 学会用字符串格式化处理数据
- 理解循环、条件判断在实战中的应用
- 完成一个“能存、能查、能统计”的完整小工具
二、工具核心功能
- 记录收支:输入日期、金额、用途、类型(收入/支出),自动保存到文件
- 查看明细:读取文件中的所有记账记录,格式化输出
- 月度统计:输入年份和月份,自动计算该月总收入、总支出、结余
三、实战:一步步实现记账工具
1. 核心思路
用文本文件(account_book.txt)存储记账数据,每条记录占一行,字段用逗号分隔(如:2024-05-20,100,早餐,支出)。通过函数分别实现“记录”“查询”“统计”功能,最后用菜单让用户选择操作。
2. 完整代码(可直接复制运行)
importos# 定义记账文件路径ACCOUNT_FILE="account_book.txt"definit_file():"""初始化记账文件,如果文件不存在则创建"""ifnotos.path.exists(ACCOUNT_FILE):withopen(ACCOUNT_FILE,"w",encoding="utf-8")asf:# 写入表头(可选,方便用户直接打开文件查看)f.write("日期,金额,用途,类型\n")defadd_record():"""添加收支记录"""# 获取用户输入date=input("请输入日期(格式:YYYY-MM-DD,如2024-05-20):")amount=input("请输入金额(数字,如100、59.9):")purpose=input("请输入用途(如早餐、工资):")type_=input("请输入类型(收入/支出):")# 简单数据验证(避免输入为空)ifnotall([date,amount,purpose,type_]):print("错误:所有字段不能为空!")returniftype_notin["收入","支出"]:print("错误:类型只能是'收入'或'支出'!")return# 将记录写入文件(追加模式)withopen(ACCOUNT_FILE,"a",encoding="utf-8")asf:record=f"{date},{amount},{purpose},{type_}\n"f.write(record)print("记录添加成功!")defview_records():"""查看所有收支明细"""ifnotos.path.exists(ACCOUNT_FILE)oros.path.getsize(ACCOUNT_FILE)==0:print("暂无记账记录!")returnprint("\n=== 所有收支明细 ===")withopen(ACCOUNT_FILE,"r",encoding="utf-8")asf:# 跳过表头,读取后续内容next(f)forlineinf:line=line.strip()# 去除换行符和空格ifnotline:continuedate,amount,purpose,type_=line.split(",")print(f"日期:{date}| 金额:{amount}元 | 用途:{purpose}| 类型:{type_}")print("===================\n")defmonthly_statistics():"""月度收支统计"""ifnotos.path.exists(ACCOUNT_FILE)oros.path.getsize(ACCOUNT_FILE)==0:print("暂无记账记录!")returnyear_month=input("请输入要统计的年月(格式:YYYY-MM,如2024-05):")total_income=0.0total_expense=0.0withopen(ACCOUNT_FILE,"r",encoding="utf-8")asf:next(f)# 跳过表头forlineinf:line=line.strip()ifnotline:continuedate,amount,purpose,type_=line.split(",")# 判断日期是否匹配目标年月ifdate.startswith(year_month):amount=float(amount)iftype_=="收入":total_income+=amountelse:total_expense+=amount surplus=total_income-total_expenseprint(f"\n==={year_month}收支统计 ===")print(f"总收入:{total_income:.2f}元")print(f"总支出:{total_expense:.2f}元")print(f"月结余:{surplus:.2f}元")print("=======================\n")defmain():"""主菜单"""init_file()# 初始化文件whileTrue:print("===== Python 个人记账工具 =====")print("1. 添加收支记录")print("2. 查看所有明细")print("3. 月度收支统计")print("4. 退出工具")choice=input("请输入操作编号(1-4):")ifchoice=="1":add_record()elifchoice=="2":view_records()elifchoice=="3":monthly_statistics()elifchoice=="4":print("感谢使用,再见!")breakelse:print("输入错误,请选择1-4之间的编号!")if__name__=="__main__":main()3. 关键代码拆解(新手必看)
(1)文件初始化与读写模式
init_file()函数:启动工具时自动检查是否存在记账文件,不存在则创建,避免后续读写报错。open()函数的3种核心模式:"w":写入模式(覆盖原有内容,适合创建文件);"a":追加模式(在文件末尾添加内容,适合记录数据);"r":读取模式(读取文件内容,不修改数据)。
with open(...) as f:自动管理文件关闭,避免新手忘记写f.close()导致的资源泄漏。
(2)数据验证与格式化
- 用
all([date, amount, purpose, type_])检查所有输入是否为空,避免无效数据; - 用
type_ not in ["收入", "支出"]限制类型输入,保证数据一致性; f-string格式化输出(如f"日期:{date} | 金额:{amount}元"),让结果更易读。
(3)月度统计核心逻辑
date.startswith(year_month):判断记录的日期是否以目标年月开头(如2024-05-20匹配2024-05);- 用
float(amount)将字符串格式的金额转为数字,才能进行加减计算; - 保留2位小数(
:.2f),让金额显示更规范(如59.9显示为59.90)。
四、运行效果演示
- 启动工具后,会显示主菜单,输入
1添加记录:
===== Python 个人记账工具 ===== 1. 添加收支记录 2. 查看所有明细 3. 月度收支统计 4. 退出工具 请输入操作编号(1-4):1 请输入日期(格式:YYYY-MM-DD,如2024-05-20):2024-05-20 请输入金额(数字,如100、59.9):30 请输入用途(如早餐、工资):早餐 请输入类型(收入/支出):支出 记录添加成功!- 输入
2查看明细:
=== 所有收支明细 === 日期:2024-05-20 | 金额:30元 | 用途:早餐 | 类型:支出 日期:2024-05-20 | 金额:5000元 | 用途:工资 | 类型:收入 ===================- 输入
3统计月度收支:
=== 2024-05 收支统计 === 总收入:5000.00元 总支出:30.00元 月结余:4970.00元 =======================五、新手避坑小贴士
- 编码问题:打开文件时一定要指定
encoding="utf-8",否则中文内容可能出现乱码。 - 数据格式:输入日期和年月时,严格按照提示格式(如
YYYY-MM-DD),否则统计功能会失效。 - 金额输入:金额必须是数字(如
100、59.9),如果输入文字(如一百),会报错,后续可以学习try-except语句处理这种异常。 - 文件路径:记账文件
account_book.txt会保存在脚本所在的文件夹,找不到的话可以检查脚本的存放路径。
六、总结与后续规划
这篇文章通过“个人记账工具”,带大家巩固了Python文件读写、字符串处理、循环判断等核心基础知识点。新手学习的关键还是“边学边练”,把知识点融入到实际项目中,才能记得更牢。
接下来的系列文章,我会继续分享更实用的Python新手项目,比如:
- 批量重命名文件工具
- 简单的爬虫(获取网页数据)
- 自动化办公(操作Excel、发送邮件)
如果这篇文章对你有帮助,欢迎点赞收藏+关注,也可以在评论区分享你的使用体验或遇到的问题,我们一起交流进步!@TOC
欢迎使用Markdown编辑器
你好! 这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown将代码片显示选择的高亮样式进行展示;
- 增加了图片拖拽功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的KaTeX数学公式语法;
- 增加了支持甘特图的mermaid语法1功能;
- 增加了多屏幕编辑Markdown文章功能;
- 增加了焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了检查列表功能。
功能快捷键
撤销:Ctrl/Command+Z
重做:Ctrl/Command+Y
加粗:Ctrl/Command+B
斜体:Ctrl/Command+I
标题:Ctrl/Command+Shift+H
无序列表:Ctrl/Command+Shift+U
有序列表:Ctrl/Command+Shift+O
检查列表:Ctrl/Command+Shift+C
插入代码:Ctrl/Command+Shift+K
插入链接:Ctrl/Command+Shift+L
插入图片:Ctrl/Command+Shift+G
查找:Ctrl/Command+F
替换:Ctrl/Command+G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。
如何改变文本的样式
强调文本强调文本
加粗文本加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210运算结果是 1024.
插入![]()
链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的代码片.
// An highlighted blockvarfoo='bar';生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
| 项目 | Value |
|---|---|
| 电脑 | $1600 |
| 手机 | $12 |
| 导管 | $1 |
设定内容居中、居左、居右
使用:---------:居中
使用:----------居左
使用----------:居右
| 第一列 | 第二列 | 第三列 |
|---|---|---|
| 第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
| TYPE | ASCII | HTML |
|---|---|---|
| Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
| Quotes | "Isn't this fun?" | “Isn’t this fun?” |
| Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
创建一个自定义列表
- Markdown
- Text-to-HTMLconversion tool Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb NΓ(n)=(n−1)!∀n∈N是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息LaTeX数学表达式here.
新的甘特图功能,丰富你的文章
- 关于甘特图语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于Mermaid语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于Flowchart流程图语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到文章导出,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
mermaid语法说明 ↩︎
注脚的解释 ↩︎