news 2026/4/3 1:30:47

新手进阶Python:打造个人记账小工具,轻松管理收支

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
新手进阶Python:打造个人记账小工具,轻松管理收支

大家好!我是CSDN的Python新手博主~ 上一篇分享了「文件整理小工具」,很多小伙伴说跟着实操后收获满满,这次继续带来新手友好的实战项目——「个人记账小工具」!

日常记账总是记了就忘?Excel表格整理太麻烦?这个工具能帮你快速记录收支、查询明细、统计月度收支,全程用基础Python语法实现,适合刚学完文件操作的新手巩固知识,同时解决实际需求~

一、本次学习目标

  1. 掌握Python文件读写的核心用法(open()函数、读写模式)
  2. 学会用字符串格式化处理数据
  3. 理解循环、条件判断在实战中的应用
  4. 完成一个“能存、能查、能统计”的完整小工具

二、工具核心功能

  1. 记录收支:输入日期、金额、用途、类型(收入/支出),自动保存到文件
  2. 查看明细:读取文件中的所有记账记录,格式化输出
  3. 月度统计:输入年份和月份,自动计算该月总收入、总支出、结余

三、实战:一步步实现记账工具

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. 启动工具后,会显示主菜单,输入1添加记录:
===== Python 个人记账工具 ===== 1. 添加收支记录 2. 查看所有明细 3. 月度收支统计 4. 退出工具 请输入操作编号(1-4):1 请输入日期(格式:YYYY-MM-DD,如2024-05-20):2024-05-20 请输入金额(数字,如100、59.9):30 请输入用途(如早餐、工资):早餐 请输入类型(收入/支出):支出 记录添加成功!
  1. 输入2查看明细:
=== 所有收支明细 === 日期:2024-05-20 | 金额:30元 | 用途:早餐 | 类型:支出 日期:2024-05-20 | 金额:5000元 | 用途:工资 | 类型:收入 ===================
  1. 输入3统计月度收支:
=== 2024-05 收支统计 === 总收入:5000.00元 总支出:30.00元 月结余:4970.00元 =======================

五、新手避坑小贴士

  1. 编码问题:打开文件时一定要指定encoding="utf-8",否则中文内容可能出现乱码。
  2. 数据格式:输入日期和年月时,严格按照提示格式(如YYYY-MM-DD),否则统计功能会失效。
  3. 金额输入:金额必须是数字(如10059.9),如果输入文字(如一百),会报错,后续可以学习try-except语句处理这种异常。
  4. 文件路径:记账文件account_book.txt会保存在脚本所在的文件夹,找不到的话可以检查脚本的存放路径。

六、总结与后续规划

这篇文章通过“个人记账工具”,带大家巩固了Python文件读写、字符串处理、循环判断等核心基础知识点。新手学习的关键还是“边学边练”,把知识点融入到实际项目中,才能记得更牢。

接下来的系列文章,我会继续分享更实用的Python新手项目,比如:

  • 批量重命名文件工具
  • 简单的爬虫(获取网页数据)
  • 自动化办公(操作Excel、发送邮件)

如果这篇文章对你有帮助,欢迎点赞收藏+关注,也可以在评论区分享你的使用体验或遇到的问题,我们一起交流进步!@TOC

欢迎使用Markdown编辑器

你好! 这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown将代码片显示选择的高亮样式进行展示;
  3. 增加了图片拖拽功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的KaTeX数学公式语法;
  5. 增加了支持甘特图的mermaid语法1功能;
  6. 增加了多屏幕编辑Markdown文章功能;
  7. 增加了焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了检查列表功能。

功能快捷键

撤销: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. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
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)=(n1)!nN是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.Γ(z)=0tz1etdt.

你可以找到更多关于的信息LaTeX数学表达式here.

新的甘特图功能,丰富你的文章

2014-01-072014-01-092014-01-112014-01-132014-01-152014-01-172014-01-192014-01-21已完成进行中计划一计划二现有任务Adding GANTT diagram functionality to mermaid
  • 关于甘特图语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间, 文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于Mermaid语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.3.0开始我的操作确认?结束yesno
  • 关于Flowchart流程图语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到文章导出,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/23 11:30:46

Linux无线网络革命:RTL8852BE驱动的终极配置指南

Linux无线网络革命:RTL8852BE驱动的终极配置指南 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统下Realtek RTL8852BE无线网卡频繁断线而困扰吗?这…

作者头像 李华
网站建设 2026/3/30 22:53:59

Zotero Reference:3步完成的智能文献管理解决方案

副标题:PDF参考文献解析与多源数据整合的学术工具配置指南 【免费下载链接】zotero-reference PDF references add-on for Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-reference Zotero Reference是一款专为学术研究者设计的PDF参考文献插…

作者头像 李华
网站建设 2026/4/2 17:06:19

ollama vs vLLM:谁才是本地大模型推理王者?

vLLM:重新定义本地大模型推理的性能边界 在企业纷纷拥抱生成式 AI 的今天,一个现实问题摆在面前:如何让动辄数十 GB 显存占用的大模型,在有限资源下稳定、高效地服务成百上千的并发请求?尤其是在私有化部署场景中&…

作者头像 李华
网站建设 2026/3/30 14:28:47

5大VLC皮肤场景化应用指南:打造专属影音工作空间

你是否曾经在深夜观影时被刺眼的界面打扰?或是在办公时觉得播放器界面过于单调乏味?VLC播放器的默认界面虽然功能强大,但在视觉体验上却难以满足现代用户的多元化需求。VeLoCity皮肤集合通过5款精心设计的主题,为不同使用场景提供…

作者头像 李华
网站建设 2026/3/31 11:45:32

利用FLUX.1-dev镜像实现高保真图像编辑的技术路径

利用FLUX.1-dev镜像实现高保真图像编辑的技术路径 在创意内容生产日益依赖AI的今天,设计师和开发者面临一个核心挑战:如何在保持生成速度的同时,确保图像细节的真实感与语义指令的一致性?传统扩散模型虽然能产出视觉上惊艳的结果&…

作者头像 李华