本文抽取会计日常中,重复工作为小项目,由 AI 给出实现小项目自动化的 Python 代码,再用双链笔记 Obsidian 形成个人知识库,形成”学、记、练“的完整学习闭环。改变了自学编程”只看不练“的无效学习方法。也不是传统的“由易到难”的教学方式,而是直接上手工作中用得到的小项目,练一个用一个。这样的学习方式,有正向反馈,有价值感,容易保持学习的动力。
一、前言
现状是残酷的
会计人和财务部,天然是企业的数据中心。由于历史原因,会计及财务部门,普遍的工作模式还是收集原始单据、制作凭证,出具税局要求的三张表,期间用到EXCEL的还是基本功能。涉及到数据清洗、数据匹配等稍高阶一些的技能,完全不会,还得纯手工操作。虽然自嘲是“表哥表妹”,却并不合格。
根据公开资料显示:
德勤报告:财务领域60%的基础工作已具备自动化潜力。
国际会计师联合会:2020-2024年全球基础会计岗位减少18%,且72%的岗位流失源于自动化工具。
中国会计视野网调查:仅31%的会计学习过数据可视化工具,28%能独立搭建财务模型。
某二线城市会计岗位简历投递量,同比增长45%,录用率却降至8.7%。同时行业呈现马太效应:头部企业争抢复合型人才,中小企业用智能软件替代全职岗位。
在 AI 时代,会计有被 AI 替代的焦虑,老板有财税合规的焦虑(国家也是用 AI 来”以数治税“)。老板需要更多的数据支持,以应对这个需要精细化运营管理的时代,因为,野蛮生长的时代已经过去。但会计们还在加班加点的处理凭证,满足于按时出具三张表,能在时间节点之前完成老板临时需要的数据就阿弥陀佛了!这种需求——价值的不匹配,很难不让老板们将财务部门定义为成本中心而不是利润中心!
会计们怎么办?路径很多!而本文,聚焦在帮助会计提升数据处理的效率(注意, 是聚焦数据处理而不是数据分析)。省出的时间,让自己多去关注数据背后的故事,将会计的职能从事后核算提前到事前预测、决策,事中的控制上面去,发挥出会计的价值,将财务部门从成本中心转变成利润中心。
认真对待EXCEL
并不是说我们要学更高级的技能去替代 EXCEL,EXCEL 在全球范围内,仍然是数据处理、数据分析的第一工具!但我们 70% 以上的会计人员,并不知道 EXCEL 能应用到什么程度。会计人,请务必关注它、学好它!由于 EXCEL 不是本文的重点,这里给会计人提供一个视角,就是学习它的函数!在 AI 中提问,请它给你列出会计人必学必会的 EXCEL 函数,然后,利用自己的工作数据,学习它们,练会它们!到这一步,你会发现,你的工作技能已经脱胎换骨了!
为什么定位于学习 Python
-
Python 是目前主流编程语言之一,网上资源多,各种教程多。
-
Python 是数据处理、数据分析、数据可视化、数据自动化的必备编程语言。它有丰富的“库”,必免我们重复造“轮子”,节省我们大量的时间。
-
在数据提取、数据清洗、数据可视化等方面,还有一个微软的 Power BI 可胜任,但要想熟练使用它,还是得学习它的 DAX 函数体系,它的学习曲线仍然陡峭。
-
虽然 Python 的学习曲线也有一定的陡峭度,但学习它, 是学习一种编程思维,编程思维,会带给会计一种全新的工作视角和认知,能理解什么是****规范的数据准备、数据输入、数据清洗、数据处理和数据分析,会培养会计用** 数据驱动决策**的习惯,让会计从 “数据搬运工” 升级为 “财务分析决策者”。
会计学习 python 能干什么?
首先我们需要明确一点,完全撑握 Python 很难!不要被网上带偏觉得 Python 很简单。它是“万能胶水语言”,可应用的领域很多,反而说明它的知识点很广,非 IT 领域的会计,要想熟练应用它,没有3-4年的高强度投入,是不可能撑握它的。
但我们会计来编程,不是写出功能齐全、应用全面的 ERP,而是立足于高效解决重复性工作痛点、提升数据处理的深度和广度、杜绝人工失误带来的合规风险,从而节省时间将自己从 “执行层” 转向 “决策支持层”,以适应数字化转型的行业趋势。
所以,会计编程,只需编写“小脚本”即可。什么是脚本? 它仍然是一段程序代码,但轻量且针对性强,写完后直接运行就能看到结果,重点是可重复使用。如,需要合并 EXCLE 里的多个 sheet 表,编个脚本 ,以后用到了,把 EXCEL 文件名和 sheet 表名更换一下,秒实现。
记住,如果有项工作,会计每个月需要重复操作 3 次以上,就值得为它写个脚本。当你的脚本积累得越来越多,才是真正的“会计越老越值钱”,而不是现在的会计超过35岁就面临工作难找的问题。
总结会计学 Python 能干什么:以 EXCEL 为主要数据来源,以重复工作自动化为目标,借助 AI 完成 Python 脚本的编写。
为什么从小项目开始学 Python
所有的 Python 课程、书籍,都是按步就班的从易到难展开。会计开始热情高昂的投入学习,不久就觉得,学习它,对我有什么用?没有正向价值的反馈,慢慢的吞没了学习的热情,最后学习 Python 也无疾而终了。
没有输出,学习就没有动力,而输出没有价值,却是学习的休止符!会计处于最坏的时代,也是最好的时代。AI 替代会计的基础岗位是现实,如果我们勇于突破,利用 AI 来辅助学习,从而成为 AI 的领导者,让 AI 成为你的数字员工,却是最好的时代。
因此,本文在会计常用的工作场景,提炼出一些最重复的工作,形成一个一个小项目,让 AI 写代码,我们跟着 AI 来学习,并立即投入练习,练习完一个脚本,这个脚本马上能用,能立刻得到正向反馈和价值感,从而保持学习的动力。
学习方法
以下方法,是我自己实践过并卓有成效的方法,照着做,不走弯路不踩坑。
-
首先:解决看不懂的英文单词:在电脑上下载一个电子词典,不懂的单词马上查并记录下来。这里有个窍门,把英标记下来,能读出它,这个单词就记住一半了。以我的经验,每个脚本新的单词量不会很大,多记录,到后期,基本上遇不到新单词了。
-
其次(重点):找个有双链功能的笔记软件(推荐 Obsidian),每个脚本建一个笔记1,里面涉及到的所有不懂的语法知识点,汇总并另建一个笔记2,然后又把每个新语法,单独建一个笔记3(有很多笔记3),当然,新的英语单词也单独建一个笔记4。最后,把所有涉及的笔记2-3,通过双链统一连接到脚本笔记1里。这样,你学过的内容,通过双链,形成了一张独属于你自己的知识网络,也就是个人知识库。以后你能方便的从应用——知识点来回穿梭,形成知识的复利。Obsidian 功能全面,我们刚开始不要去折腾它,能记笔记,能双链,就足够用了,把有限的个人能量聚焦到 Python 学习中去。
-
全程依赖 AI,多下载几个 AI ,如果一个 AI 给出的答案不理解,换一个。我常用的是 DeepSeek、kimi、豆包,内容之间相互印证,理解起来就容易多了。
-
从 AI 拷贝内容到 Obsidian,如果直接用 Ctrl+v,会出现格式错乱,用Crtl+Shift+v,能保证格式正确,表格、代码段都能原样还原。
-
将 AI 给出的代码,每一行(如有必要),用自己的理解翻译成中文,后面练习的时候,在每一行的中文下写代码。这一步,主要是学习用编程完成任务的思路,刚开始记不住没关系,勇敢的去看原代码,然后多练!记住,从学习编程思路去理解语法,才是我们需要撑握的学习编程的主要方法。
-
重中之重 :多练习!多练习!多练习!我学习的第一个脚本,重复写了10遍,直到闭眼就能写出代码。极致的重复,就是天赋!
-
Python 的知识点很多,出现在脚本中的语法,会有很多参数、应用方法,记住,只学习这个脚本用到的知识点,下次用到其他的知识点再学习。
-
本文, 是和你一起共建的。你可以把本文放到你的 Obsidian 里,并使之成为你学习 Python 的根笔记(以下都用根笔记称之),将上面所说的笔记1-4链接到本文。所以,本文不会细讲知识点,而是和你一起,探索使用 AI 学习编程的方法。所有的知识点,需要你自己去问 AI,并按你的理解形成自己的笔记。最重要的且最有价值的 ,记录你练习时犯的错误:缩进问题、全角半角问题、打没打小括号等。最后,一本新的、你自己写的、有“失败是成功之母”价值的 《会计从小项目开始学Python——练一个用一个》书籍诞生了!
二、安装 Python 环境
本文是基于 Windows 环境编写,其他操作系统,请自行问 AI。
Python 环境,往细了说是一个很复杂的过程,但基于我们的需求,只需要安装一个程序: Anaconda 。它是一套 “Python 数据科学全家桶”—— 它把 Python 解释器、海量数据科学库(比如财会常用的 pandas、可视化的 Matplotlib、数据分析的 Numpy等第三方库)、环境管理工具Conda、交互式编程工具 Jupyter Notebook等打包在一起,解决了新手装库、配环境的痛点。
当然,随着学习的推进,单独安装python、代码编辑器还是有必要的。
-
Python 的版本优先选择稳定的版本,优先推荐3.9-3.11版。
-
代码编辑器,会计人用 vs code 比较好,但这里更推荐带 AI 功能的代码编辑器:Qoder。它集成了 AI,你让 AI 写一段代码,能自动形成代码文件,很方便,而且你向它提问,它可以基于你现在的代码,给出更有针对性的意见。
怎么安装它们,请问 AI,并记录下你安装时的问题、错误和解决办法,形成你自己的 Obsidian 笔记并与根笔记双链。
三、Python + Pandas 基础
-
变量:重点了解它的命名规则。
-
赋值:重点区别赋值和“==”相等符号的区别。
-
输入输出语句:print 和 input。
-
数据类型:整数,浮点数(小数),字符串、列表、字典、元组、集合、布尔型、空值(None)。会计常用的是整数、浮点数、字符串、列表、字典、布尔型。
-
切片:重点理解“左闭右开”。
-
索引:主键、复合主键。
-
f 格式化字符串。
-
r 原始字符串标识。
-
if 条件判断语句。
-
for 循环语句。
-
while 循环语句。
-
方法。
-
属性。
-
自定义函数 def。
-
库,调用库的 import 语句。
-
模块。
-
注释。
-
缩进。
-
迭代及可迭代对象。
-
Pandas:是 Python 中专门用来高效处理结构化数据(如 Excel 财务表格、银行流水、发票清单)的工具库,核心是通过 Series(单列数据)和 DataFrame(整张表格)两种数据结构,实现数据的读取、清洗、计算、筛选和导出,让财务数据处理从手动操作变成自动化流程。先了解 Series 和 DataFrame。
-
Python 之禅。
以上内容,不需要马上理解,但先在 Obsidian 里建好笔记,并与根笔记做好双链,方便接下来的小脚本的学习。
四、数据的三范式(3NF)
什么是数据的范式:是关系型数据库 / 结构化数据(比如 Excel 表格)的数据组织规则 ,核心目标是:
-
消除数据冗余(比如客户名称不用在每张发票里都写一遍);
-
避免数据更新异常(改客户名称只需改一处);
-
保证数据一致性(财务数据核对不出现矛盾)。
三范式是逐级满足的:满足第二范式(2NF)必须先满足第一范式(1NF),满足第三范式(3NF)必须先满足第二范式(2NF)。
基础知识:一张表格,坚向排列的叫列,横向排列的叫行,交叉部分叫单元格。每列的第一行叫列标题或字段值,每行的第一列叫索引(如果设置有)。
第一范式(1NF):列不可再分,每格只有一个值且保证原子性。即:
-
同一列属性一致:如“部门”这一列,就不能填写关于“职务”的数据,
-
保证原子性:如“电话号码”这一列,某一格的数据不能写成”13912345678,010-61234567“,它们没有保证”原子性“,如果需要同时记录,则分成两列,一列是”手机号码“,一列是”固定电话“。
第二范式:消除部分依赖,必须有主键,非主键列完全依赖主键。
第三范式:消除传递依赖,非主键列不依赖其他非主键列。
后两种范式,请大家自行问询 AI。提示词可以是:EXCEL 数据三范式等。
大家使用 EXCEL 时,太喜欢用单元格跨列居中这个功能了,它是数据清洗最大工作量之一,所以,在数据建表之初遵守三范式,可节省后期很多时间。
在使用 EXCEL时,有一个小技巧,一张数据表,使用三张表来分工合作:第一张表存放源数据(调整成满足三范式),第二张表是工作表,在这张表应用函数、辅助列等方法,完成工作任务,第三张表是呈现表,这里可以使用跨列居中等各种格式,制作出符合需要、美观的报表。这三张表之间使用数据引用的方式来保证三张表的同步。
五、开始练习
(一)合并一个 EXCEL 文件中的多个 sheet 表
场景:有一家连锁公司,每个月从收银软件导出营业流水放在了一个EXCEL文件中(收银软件的功能),每个店的数据存放在单独的 sheet 表中。会计每个月都需要将所有门店的数据汇总在一张 sheet 表中,方便统计。
合并多个 sheet 表,在 EXCEL 的 Power Query 可以实现,WPS 也有相应的功能。这里用 Python 练习它,是用一个最容易理解的工作任务来入门。
提示词:我有一个 EXCEL 文件,里面有多张 sheet 表,存放着相同数据结构的不同数据内容 ,我需要将这些 sheet 表,纵向汇集在一张 sheet 表中 ,且新增一列,填写每行数据来源于哪张表,要提供源文件和绝对路径的输入、sheet 表名的输入、合并后文件名和绝对路径的输入。请将上述内容,用 Python 编写代码并实现它。
AI 给出的代码:
打开 jupyter notebook(安装好Anaconda会自动出现,需要在”开始“找到它);
它会打开你的默认浏览器,第一页的页签叫”Home“;
在本页找到”Files"页签,这张页签的顶部靠右,有一个包含下拉箭头的按钮,名字叫“New”;
点开它,选第一项“Python 3 (ipykernel)”;
浏览器会打开第二张页签,名字是“Untitled1",这就是编写代码的地方了。
将 AI 给出的代码复制到 jupyter notebook,起个名字保存它。
名字可以在:本页签(不是浏览器页签)菜单区域的上一行,”jupyter"的右侧,直接点击显示“Untitled1”的地方,输入你想要的文件名,如“EXCEL多sheet表合并工具“。然后在菜单栏“File”里,找到“Save Notebook”并点击它。
在代码块的上方,菜单区域,找到实心三角按钮:▶,这是运行程序的按钮,点击它;
在代码块的底部,会显示程序运行的结果,根据程序运行出来的提示,一步一步完成它;
打开完成后新生成的 EXCEL 文件,看看是不是达到了你的要求?
保存文件的快捷键:Ctrl+s,运行程序的快捷键:Shift+Enter,在运行程序之前,先保存文件,不然有些代码更新不会被执行。
以后,只要有同样的需求,找到“EXCEL多sheet表合并工具.py“,用 jupyter notebook 打开它,根据提示,输入你的源文件名、sheet表名、合并后的新文件名,1分钟就完成多 sheet 表的合并,比自己手动一张一张表在 EXCEL 内拷贝是不是节省了大量的时间?
下面,我们开始学习怎么向 AI 学习。
我们先将代码复制到 Obsidian,形成一个新的笔记,起名”合并EXCEL多sheet页脚本1“,(以下简称脚本1笔记)并与根笔记双链。
前面三行是调用库的语句,向 AI 提问:请向我讲解 Python 中 import 的详细用法。要关注 as 是干啥的,from……import……和直接 import 有什么区别。还可以向 AI 提问:作为一名会计,Python 中哪些库是我需要学习的。
我们在 Obsidian 中新建笔记,命名为”新语法汇总页1“(数字与对应的脚本笔记保持一致,以下简称语法1笔记),先保持空白,但记得与根笔记、脚本1笔记双链。这样做是为了后续练习的时候有一个统一查询的地方。
为 import 单独建一个新的 Obsidian 笔记,起名”python import",将来所有涉及到 Python 语法的笔记名,都以“python"开头,方便笔记的整理、归集、搜索。
语法1笔记不是空着的吗,这时,可以去链接刚建好的 import 笔记。在这张笔记中,汇集了脚本1所有涉及的语法。
下面来到了自定义函数 def。向 AI 提问:请向我讲解 Python 中 def 的详细用法。
这里要注意,def 这一行要以半角冒号结尾。
Python 中所有的符号都是半角, 只有自己想显示、输出的字符串可以是全角。下面不再重复。
这里,出现了个英语单词,查词典:merge:/mɜːrdʒ/,合并。在 Obsidian 中新建笔记,命名为”新单词1“,同样,文件名中的数字与对应的脚本笔记同步。与根笔记、脚本1、语法1笔记建立双链。
到这一步,围绕脚本1的一套笔记群已建好。为什么不建一个笔记就行,因为内容过多,对查询不方便,而保持笔记的”原子性“,也方便笔记链接更多笔记,方便它的复用。
def 下面,有一段中文,是用三个双引号包裹,这是 Python 中写注释的方法,需要为“注释”这个知识点建立笔记。
print语句,请 AI 给出讲解后,单独形成笔记,同时做好双链。这里,建议与 f 格式化字符串一起学习,实现丰富的输出内容。
这里需要注意的是,只要是输出字符串内容,字符串需要一对引号包裹。
AI 给出了下面一段代码的主题: # 1. 输入源文件绝对路径,这里的知识点是 # 号是干什么用的。
从 while True: 到 break,这段代码用于接收源文件名和它所在的绝对路径,并对接收的内容进行去空格、将中文引号转换到英文引号等操作。
while 是条件循环,它这里直接给了一个布尔值:True(注意大小写),意思是:当为真时,循环以下代码。这里有个问题,这样写,就不会有“假”的时候,那不是一直运行下面的代码?
将上面的疑问,分别向 AI 提问,并做好笔记。第一个提问:讲解 while 循环,第二个提问:什么场景使用一直为真的 while True: 。
source _input = 这一行,有以下几个知识点需要建立笔记:
-
新单词:source
-
变量 source input ,为什么两个单词之间要有个 ?
-
input 语句。
-
\n,是什么?
-
它写的路径,为什么用 \\ 表示,而不是像windwos中用一个 \ 表示?
-
.strip()
将以上新知识点,逐个请教 AI ,并做好笔记、双链。
source_input = source_input.replace(’"’, ‘’)….这一行的新知识点:
-
.replace()
-
为什么同名的变量,经过 .replace 操作后,又符值给回自己?
-
这一句代码,实现了什么目的?
-
新单词:replace,连同 place 一起记录、学习。(下面就不涉及新单词,因为每个人的英文水平不一致,这里只是介绍一种学习方法。)
tyr: …… except: ,是干什么的?为什么在这里用它,什么场景需要用到它。
source_file = Path(source_input).resolve()
-
这是新建了一个变量,叫 source_file,为什么?
-
Path().resolve,注意 Path 的 P 不能小写。
在 except: 代码块里,有一个 continue 需要学习。
source_file = str(source_file)
-
str
-
这一句的目的?
break:这要重点理解,它的作用是什么?在代码的什么地方写合适,它的缩进要求?
\# 2. 输入需要合并的sheet名,这一段代码块,是用于接收输入的sheet表名,并做相应的规范。
sheet_names = [],这里将一个空列表赋值给新建的变量,为什么使用列表,不使用字典、元组、集合等数据类型?
for 循环这一行:
-
name 是什么?它的作用是啥?
-
.split(),为什么用它,不用它行不行?
-
in sheet_input,为什么使用 sheet_input,使用它时,它是什么数据类型?
-
完整理解这一句 for 循环,它为什么能循环?循环时做了哪些动作?它在本段代码中起到什么作用?什么场景可以用到它?
clean_name = name.strip(),结合上一段内容来理解这句代码。
if 语句块:
-
用到 and 逻辑运算、not in 成员判断等工具。理解它们的运行逻辑。
-
if clean_name 是什么意思?一般 if 都配套使用逻辑判断语句,它这里只写一个变量,是什么意思?有什么作用?
-
.append()
-
注意 if 语句块中缩进的规范使用。
学习到这里,我们还需要解决几个问题:
像 .append() 这种用法,什么时候使用小数点 . ,什么时候使用小括号(),小括号中是放参数的,为什么有时候是空的?
\# 3. 接收输出文件绝对路径,这段代码,是设置合并后新文件名及存放路径的。
\# 4. 核心合并逻辑,实现 sheet 表的纵向合并。
sheet_dict = pd.read_excel(source_file, sheet_name=sheet_names)
-
为什么变量名里就带dict(字典)?
-
pd.read_excel():pd 是什么?读进来的数据是什么数据类型?
-
小括号里的两个参数起什么作用?
-
在学习 def 的时候,深刻理解了参数这个知识点没?
df_list = [],这又是建一个空列表,结合下面的代码,理解它有什么用?
for SheetName, df in sheet_dict.items():
-
这个 for 循环的循环变量(也叫迭代变量),有两个?那从 sheet_dict 中取出的数据,怎么放到两个循环变量里?这一步,要复习字典的内容。
-
.items()。这里要特别关注,使用这个函数,区分了什么数据类型的数据?
-
在这一步,应该得到你之前学习 for 循环时建立的笔记的帮助。
-
df[‘表名’]
if df_list: 这里的用法,与上面的 if clean_name 是一样的。
big_df = pd.concat(df_list, ignore_index=True)
这一句代码,就是实现表格纵向合并的关键。
-
pd.concat(),以及里面的参数。
-
big_df.to_excel():输出为 EXCEL 文件,要注意小括号中两个参数的用法,它使用了什么变量,这个变量是在哪一步生成的,生成了什么内容。
后面是一些打印语句,重点复习 f 格式化字符串的用法,还需理解:
-
用 else:的用意?
-
try: …… except Exception as e: 的使用目的。
if name == “main”:
这一句代码需要重点理解,学会了这一句,去看别人的程序,就好理解了。学习编程,看别人成熟的代码,是加快学习进度的一个好办法。
merge_excel_sheets(),调用上面自定义函数,这里需要提个问题,函数通过形参、实参来传递数据,这里怎么只有一个小括号,里面没有任何函数?
后面的语句,应该看得懂了。
第一个脚本,我们学习起来会很慢,但这是“磨刀不误砍柴工”!在理解了代码的基础上,需要自己输入代码进行练习,每一次练习以脚本能正确运行出结果为标志。
重复这个练习10遍,不断利用你建好的双链笔记群来获得帮助,直到你不看源代码就能写出完整代码为练习成功标志!
(二)合并同一文件夹里具有相同格式的多个EXCEL文件
场景:这个场景更常用,大多信息管理软件导出的数据是按月存放的,合并它们也是一个极大的工作量。
提示词:我有一个文件夹,里面存放着多个 EXCEL 文件,它们具有相同的格式,我需要在一个新的 EXCEL 文件中,纵向合并它们。
按这个提示词,AI 可能不会一次给出满足要求的代码,需要我们反复去调整提示词。
AI 给出的代码:
我写的内容到此结束了。
本文是大家共建的,请根据自己的工作内容,提取出需要建立脚本的任务,按上述方法,一个一个的学习,建设好双链笔记群,利用双链笔记群,反复练习,直到不看源代码就可以自己写出完整代码并成功运行。
请大家将自己写的脚本共享出来,造福于更多的打工人,善莫大焉!
如果大家能将脚本发给我,我收集起来,数量足够多了,我统一发布出来,让大家能在一个地方查询、学习、交流,善莫大焉!
行动起来,让我们会计人用 AI 去应对 AI 的时代!