当前位置:首页>python>如何零基础用Python解决财务问题(绝对干货)

如何零基础用Python解决财务问题(绝对干货)

  • 2026-10-11 08:11:17
如何零基础用Python解决财务问题(绝对干货)

今天不废话,直接给大家讲一下,如何零基础用Python解决财务问题,绝对的干货。我先讲解一下基本流程,再通过举例让大家直观得体会AI的神奇之处。

基本流程

1.理清日常工作思路和操作流程,说白了就是平时是怎么干活的。比如大家需要把发票的内容统计到指定格式的模板中,基本流程为:打开模板→确定所需信息→找到发票→复制某信息→粘贴到模板对应位置→复制某信息→粘贴到模板对应位置→直至完成工作。

2.把工作思路和流程写成提示词并喂给AI(这一步很关键)。你就把自己拆好的财务工作流程老老实实交代清楚:基础数据来源于哪里、想要用基础数据干什么、数据提取和处理的规则等一条不落,再明确想要导出什么汇总表、报表。如果你略微懂一些Python只是,可以在提示词中指定固定用pandas、openpyxl或者其他库来写代码,还可以强制要求金额保留两位小数、空值处理、代码带详细注释、新文件名称自动加日期后缀不覆盖原表,千万别含糊其辞说 “帮我自动化一下”,也别漏掉表格列名和财务专属规则,说得越细、框架越清晰,AI一次性就能给你跑出能用的Python脚本,减少调整次数。

因为每个工作都不一样,所以要结合具体工作特点,来生成对应提示词。

3.将AI生成的Python代码复制下来,并进行测试。测试的过程会有报错,大家不要失望,只需要将报错的内容告诉AI,AI会结合上下文来对代码进行修正。这一步里面有个诀窍,适用于编程零基础的朋友,你一定一定一定要告诉AI:“把修改完的完整代码列示出来,我要直接复制使用”。

4.重复多次修正,直至代码运行结果完全符合你的意图。这一步大家要有耐心,还要按照结果进行思考,不能一味地依靠AI。因为代码运行的问题,可能是生成代码的问题,也可能是工作流表述不清楚的问题,还有可能是工作流本身的问题。

简单总结为下图:

示例:xml格式发票信息提取

咱们预设一下工作场景:你需要把N多张发票的发票号码、开票时间、供应商名称、含税总金额提取出来,并汇总到一个Excel中。接下来咱们按照基本流程一步一步实操一下。
1.理清日常工作思路和操作流程
首先咱们需要认清楚发票的格式,有OFD、XML和PDF,每一种格式提取的方式是不一样的。其中XML格式发票拥有法定原件效力,且采用标准化结构化数据可被系统直接识别解析,是企业发票全流程电子化管理的最优格式。所以咱们选择用XML格式发票。
其次,需要明确发票的位置,为了便于操作,要将发票放在同一个文件夹中,咱们在桌面新建一个名为“测试发票”的文件夹,并把测试使用的XML发票放在文件夹下。
再次,咱们要对XML格式发票进行解析,明确程序提取哪个位置的信息。
上面是一个XML发票的节选。大家能注意到,每一条信息前后都会对应一个英文单词,那么前后的英文单词就可以帮助我们定位到具体的信息了。因为发票信息的编码规则是既定的,咱们根据定位好的信息,使程序可以批量处理多张发票。
咱们所需要的信息是发票号码、开票时间、供应商名称、含税金额,接下来,咱们就可以确定所需信息对应的英文单词:发票号码是EIid、开票时间是RequestTime、供应商名称是SellerName、含税金额是TotalTax-includedAmount。
最后,咱们需要明确哪种报表格式,即最终提取完成后的格式是什么样的。咱们可以在发票号码、开票时间、供应商名称、含税金额的最前面加一个序号。如下图:
2.把工作思路和流程写成提示词并喂给AI
咱们明确了上面的工作流程之后,可以按照提取思路写一下提示词。下面我按自己想法写一下:

帮我用Python做一个小程序,避免报错,功能是批量提取XML格式发票的信息,要有简约美观的操作界面。操作界面有地址选择栏和提取按钮,选择我要处理的XML发票所在文件夹,然后点击提取后,开始执行程序并提取发票号码、开票时间、供应商名称、含税金信息,并按照序号、发票号码、开票时间、供应商名称、含税金额的格式顺序生成Excel文件,生成的文件存放在XML发票所在文件夹中,名称后面要有时间戳(用来确定操作时间以及便于区别之前生成的文件)。其中:序号按照提取顺序自动填充,发票号码在XML格式发票里面EIid中,开票时间在RequestTime中,供应商名称在SellerName中,含税金额在TotalTax-includedAmount中。

咱们将提示词喂给AI后,会生成如下代码,并附带使用说明:

import osimport xml.etree.ElementTree as ETimport pandas as pdimport tkinter as tkfrom tkinter import ttk, filedialog, messageboxfrom datetime import datetime# -------------------------- 核心功能函数 --------------------------def extract_invoice_info(xml_path):    """    提取单个XML文件的发票信息    :param xml_path: XML文件路径    :return: 字典格式的发票信息,提取失败返回None    """    try:        tree = ET.parse(xml_path)        root = tree.getroot()        # 定义需要提取的字段(兼容XML命名空间/直接查找)        invoice_data = {}        # 发票号码 EIid        invoice_data['发票号码'] = root.findtext('.//EIid') or ''        # 开票时间 RequestTime        invoice_data['开票时间'] = root.findtext('.//RequestTime') or ''        # 供应商名称 SellerName        invoice_data['供应商名称'] = root.findtext('.//SellerName') or ''        # 含税金额 TotalTax-includedAmount        invoice_data['含税金额'] = root.findtext('.//TotalTax-includedAmount') or ''        # 过滤完全空的数据        if all(value == '' for value in invoice_data.values()):            return None        return invoice_data    except Exception:        # 捕获所有解析异常,不中断程序        return Nonedef batch_process_xml(folder_path):    """    批量处理文件夹中的所有XML文件    """    if not os.path.isdir(folder_path):        return []    invoice_list = []    # 遍历文件夹所有文件    for filename in os.listdir(folder_path):        if filename.lower().endswith('.xml'):            file_path = os.path.join(folder_path, filename)            info = extract_invoice_info(file_path)            if info:                invoice_list.append(info)    return invoice_listdef save_to_excel(data_list, save_folder):    """    保存数据到Excel,带时间戳文件名    """    if not data_list:        return False    # 生成时间戳    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")    excel_name = f"发票提取结果_{timestamp}.xlsx"    excel_path = os.path.join(save_folder, excel_name)    # 创建有序DataFrame    df = pd.DataFrame(data_list)    df.insert(0, '序号', range(1, len(df) + 1))  # 自动填充序号    # 保存Excel    df.to_excel(excel_path, index=False)    return True# -------------------------- GUI界面 --------------------------class InvoiceExtractorGUI:    def __init__(self, root):        self.root = root        self.root.title("XML发票批量提取工具")        self.root.geometry("600x280")        self.root.resizable(False, False)        # 样式设置        self.style = ttk.Style()        self.style.configure('.', font=('微软雅黑', 10))        self.style.configure('TButton', font=('微软雅黑', 10, 'bold'))        # 文件夹路径变量        self.folder_path = tk.StringVar()        # 创建界面组件        self.create_widgets()    def create_widgets(self):        # 标题        title_label = ttk.Label(self.root, text="XML发票信息批量提取器", font=('微软雅黑', 14, 'bold'))        title_label.pack(pady=15)        # 文件夹选择区域        frame = ttk.Frame(self.root)        frame.pack(pady=10, padx=20, fill=tk.X)        ttk.Label(frame, text="发票文件夹:").grid(row=0, column=0, padx=5, sticky=tk.W)        path_entry = ttk.Entry(frame, textvariable=self.folder_path, width=45)        path_entry.grid(row=0, column=1, padx=5)        browse_btn = ttk.Button(frame, text="选择文件夹", command=self.select_folder)        browse_btn.grid(row=0, column=2, padx=5)        # 提取按钮        extract_btn = ttk.Button(self.root, text="开始提取信息并生成Excel", command=self.start_extract, width=30)        extract_btn.pack(pady=20)        # 状态提示        self.status_label = ttk.Label(self.root, text="就绪,请选择XML发票所在文件夹", foreground="gray")        self.status_label.pack(pady=5)    def select_folder(self):        """选择文件夹"""        path = filedialog.askdirectory(title="请选择XML发票文件夹")        if path:            self.folder_path.set(path)            self.status_label.config(text=f"已选择:{path}", foreground="green")    def start_extract(self):        """开始执行提取"""        folder = self.folder_path.get().strip()        if not folder:            messagebox.showwarning("提示", "请先选择XML发票所在文件夹!")            return        self.status_label.config(text="正在提取XML信息,请稍候...", foreground="blue")        self.root.update()        # 执行提取        invoice_data = batch_process_xml(folder)        if not invoice_data:            self.status_label.config(text="未找到有效发票数据,请检查XML文件", foreground="red")            return        # 保存Excel        success = save_to_excel(invoice_data, folder)        if success:            self.status_label.config(text="✅ 提取完成!Excel已生成在发票文件夹中", foreground="green")            messagebox.showinfo("完成", f"成功提取 {len(invoice_data)} 张发票信息!\n文件已保存至:\n{folder}")        else:            self.status_label.config(text="❌ 生成Excel失败", foreground="red")# -------------------------- 启动程序 --------------------------if __name__ == "__main__":    try:        window = tk.Tk()        app = InvoiceExtractorGUI(window)        window.mainloop()    except Exception as e:        messagebox.showerror("错误", f"程序异常:{str(e)}")
3.将AI生成的Python代码复制下来,并进行测试
(不会使用Python的同学,可以学习一下我另一篇文章:Python的安装和基本操作说明)
接下来咱们测试代码,运行后界面显示正常:
选择文件夹地址正常:
点击提取后运行正常:
生成的Excel文件及内容提取正常:
太棒了,咱们一次通过了,程序没有报错,而且结果符合要求。如果出现报错,或者结果偏离预期的,大家可以反馈给AI,要求AI按照报错的内容或偏离预期情况重新生成代码。咱们也可以做一个测试,比如开票时间不要有时间,只保留日期。
提示词:开票时间只保留日期,不要时间,其他代码不要动。请修改后列示出完整代码。
咱么将上述提示词再次喂给AI后会生成新的代码:
运行测试后得到如下结果:
完美!
此刻,相信大家通过上面例子已经基本学会了如何拆解工作流程,并使用AI生成Python来实现自动化办公了。其实很多工作的流程和思路是不一样的,需要大家沉下心来,根据每项工作的特点,拟出一个最优的流程,并写成易懂且细致的提示词。这样不仅可以提升代码运行效率,还可以减少代码重复调试的次数。
好了,今天的分享结束了。如果大家喜欢,可以关注我的公众号,让我们一起交流学习吧!

我的100个财务工具计划:邀你一起破局

   AI是大脑,Python是手和脚,人类指引方向。我将挑战用AI制作100个Python工具,解决财务工作中“费时间、易出错、重复率高”的痛点难点问题。

       但一个人的能力和思维终究有限,很容易陷入“闭门造车”的困境。所以想真诚地邀请你,欢迎有需求、有想法以及勇于突破传统财务工作方式的小伙伴加入,让我们一起探索AI时代的财务之路!如果你在财务工作中遇到重复性的问题,都可以在评论区告诉我,以便深入的沟通交流。

      后续我将陆续发布各类财务实用性小工具,非常期待你的留言,让我们一起用AI赋能财务!


最新文章

随机文章