当前位置: 首页 > news >正文

使用Python自动批量提取增值税发票信息并导出为Excel文件

要批量提取增值税发票的关键信息并将其导出为 Excel 文件,可以使用 Python 脚本结合 pdfplumber(用于解析 PDF 内容)、pandas(用于处理数据并导出 Excel)等库来实现。以下是实现这一目标的详细步骤。

1. 环境设置

首先,需要安装所需的 Python 库:

pip install pdfplumber pandas openpyxl

2. 编写 Python 脚本

import pdfplumber
import pandas as pd
import os# 要处理的PDF文件夹路径
pdf_folder = 'path_to_your_pdf_folder'
# 输出Excel文件路径
output_excel = 'output.xlsx'# 定义存储提取信息的列表
data = []# 遍历文件夹中的所有PDF文件
for filename in os.listdir(pdf_folder):if filename.endswith('.pdf'):pdf_path = os.path.join(pdf_folder, filename)with pdfplumber.open(pdf_path) as pdf:# 假设发票信息在第一页,解析第一页内容first_page = pdf.pages[0]text = first_page.extract_text()# 提取关键信息,下面是一些假设的示例正则表达式invoice_number = find_value_by_keyword(text, "发票号码")invoice_date = find_value_by_keyword(text, "开票日期")buyer_name = find_value_by_keyword(text, "购买方名称")buyer_tax_id = find_value_by_keyword(text, "购买方纳税人识别号")service_name = find_value_by_keyword(text, "货物或应税劳务、服务名称")quantity = find_value_by_keyword(text, "数量")unit_price = find_value_by_keyword(text, "单价")amount = find_value_by_keyword(text, "金额")tax_rate = find_value_by_keyword(text, "税率")tax_amount = find_value_by_keyword(text, "税额")total_amount = find_value_by_keyword(text, "价税合计")seller_name = find_value_by_keyword(text, "销售方名称")seller_tax_id = find_value_by_keyword(text, "销售方纳税人识别号")# 将提取的信息添加到列表中data.append({"PDF文件名": filename,"发票号码": invoice_number,"开票日期": invoice_date,"购买方名称": buyer_name,"购买方纳税人识别号": buyer_tax_id,"服务名称": service_name,"数量": quantity,"单价": unit_price,"金额": amount,"税率": tax_rate,"税额": tax_amount,"价税合计": total_amount,"销售方名称": seller_name,"销售方纳税人识别号": seller_tax_id})# 将数据导出到Excel
df = pd.DataFrame(data)
df.to_excel(output_excel, index=False)print(f"提取完成,结果已保存到 {output_excel}")def find_value_by_keyword(text, keyword):# 定义一个简单的提取函数,实际需要根据发票格式调整lines = text.split('\n')for i, line in enumerate(lines):if keyword in line:return line.replace(keyword, '').strip()return ""

3. 脚本说明

  • PDF文件名: 使用 os.listdir 遍历指定文件夹中的所有 PDF 文件。
  • PDF解析: 使用 pdfplumber 打开并读取 PDF 内容,假设发票内容位于第一页。
  • 关键字提取: 使用 find_value_by_keyword 函数从文本中提取关键信息,该函数可以根据实际情况调整正则表达式。
  • 数据存储: 将提取的信息存储在列表中,最后将列表转换为 DataFrame 并导出为 Excel 文件。

4. 注意事项

  • 发票格式: 此示例假设发票的格式是一致的,如果格式有变动,可能需要调整关键字提取的逻辑。
  • 正则表达式: 如果发票内容较复杂,可以使用正则表达式进行更精准的匹配。

5. 运行脚本

将脚本保存为 .py 文件,修改 pdf_folder 路径为你的 PDF 文件夹路径,运行脚本后,提取的信息将会被导出为一个 Excel 文件。

相关文章:

使用Python自动批量提取增值税发票信息并导出为Excel文件

要批量提取增值税发票的关键信息并将其导出为 Excel 文件,可以使用 Python 脚本结合 pdfplumber(用于解析 PDF 内容)、pandas(用于处理数据并导出 Excel)等库来实现。以下是实现这一目标的详细步骤。 1. 环境设置 首…...

vitis (eclipse) 的Indexer不能搜索、不能跳转到函数和变量定义和声明不能打开调用层次的解决方法

在使用vitis(2021.1) 过程中,有一个非常方便实用的功能,就是在函数或变量等源代码上通过右键菜单或快捷键F3、F4、CtrlAltH,也可以按住Ctrl键然后鼠标停留在函数名或变量名上,点击出现的链接,可以跳转到函数或变量的定…...

最佳HR软件指南:11款高效管理工具

文章介绍了11款人力资源管理工具:Moka、友人才、北森HRSaaS、同鑫eHR、i人事、红海eHR、BambooHR、Skuad、Hibob、OrangeHRM、Verint。 在选择人力资源管理软件时,选错不仅浪费时间和金钱,还会影响团队的工作效率和员工满意度。本文总结了11款…...

家长为孩子出国留学择校的四个步骤

如何为孩子选择最好的学校?无论您是选择公立或私立学校还是在家上学,无论您是否支付学费,都必须仔细规划。在为孩子选择学校的过程中,以下部分有供您考虑的问题。 写下对你来说最重要的五件事 在考虑选择学校时,您可…...

数据挖掘可以挖掘什么类型的模式?

一、挖掘频繁模式、关联和相关性 频繁模式(frequent pettern)是在数据中频繁出现的模式。 频繁项集一般是指频繁的在事务数据集中一起出现的商品的集合。 频繁出现的子序列,如顾客倾向于先买相机,再买内存卡这样的模式就是一个…...

JAVA中的隐式参数this

在Java中,this 关键字是一个非常重要的隐式参数,它代表当前对象的引用。通过 this,你可以访问类中的字段(属性)、方法以及构造函数中的参数(当参数名与字段名相同时,用于区分)。虽然…...

ThreadLocal 使用和详解避坑

在多线程编程中,每个线程都有自己的线程栈和线程本地存储。线程栈用于存储方法调用的信息,而线程本地存储则是每个线程私有的存储空间,用于存储线程的局部变量。ThreadLocal类提供了一种简单的方式来实现线程本地存储,它允许将线程…...

Python中使用类方法的返回值在其他方法中继续调用,return self进行链式调用

文章目录 return self进行链式调用继续思考,以下内容可以不看如果self中没有初始化valueself中定义其他变量,调用类方法外的函数 return self进行链式调用 在Python中,可以使用类方法的返回值在其他方法中继续调用。这通常通过返回类实例&am…...

基于IOT架构的数据采集监控平台!

LP-SCADA数据采集监控平台是蓝鹏测控推出的一款聚焦于工业领域的自动化数据采集监控系统, 助力数字工厂建设的统一监控平台。 为企业提供从下到上的完整的生产信息采集与集成服务,从而为企业综合自动化、工厂数字化及完整的"管控一体化”的解决方案…...

初见scikit-learn之基础教程

初见scikit-learn之基础教程 scikit-learn 基础教程 1. scikit-learn 简介1.1 什么是 scikit-learn?1.2 scikit-learn 的主要功能 2. 安装 scikit-learn2.1 安装方法2.2 验证安装 3. scikit-learn 基本使用3.1 数据加载与预处理3.1.1 加载数据集3.1.2 数据拆分3.1.3…...

基于STM32的嵌入式深度学习系统教程

目录 引言环境准备嵌入式深度学习系统基础代码实现:实现嵌入式深度学习系统 数据采集与预处理深度学习模型训练与优化模型部署与推理实时数据处理与反馈应用场景:智能物联网设备常见问题与解决方案收尾与总结 引言 随着深度学习在各种应用中的广泛采用…...

hive udf去掉map中的一个或者多个key

实现一个hive udf,可以将Map中的某一个或者多个key去掉,这里要继承GenericUDF 这个抽象类,然后Override evaluate这个函数即可,可以把执行这个udf前初始化的一些内容放在initialize方法内,比如参数的判断,函数的返回值类型等等。 代码写好之后,可以用如下方法创建这个函…...

模型量化技术综述:揭示大型语言模型压缩的前沿技术

大型语言模型(LLMs)通常因为体积过大而无法在消费级硬件上运行。这些模型可能包含数十亿个参数,通常需要配备大量显存的GPU来加速推理过程。 因此越来越多的研究致力于通过改进训练、使用适配器等方法来缩小这些模型的体积。在这一领域中&am…...

一文掌握Prompt:万能框架+优化技巧+常用指标

👉目录 1 写在前面 2 Prompt 万能框架 3 框架的细化 4 在框架上增加更多信息(RAG) 5 让大模型更好的思考(CoT) 6 附加技巧 7 优化方式及常用指标 8 写在最后 随着大模型在2023年横空出世,“Prompt 工程” 应…...

Vue 常用组件间通信方式

Vue 常用组件间通信方式 1. 父子组件通信 1.1 Props 父组件通过 props 向子组件传递数据&#xff0c;子组件通过 props 接收数据。 <!-- ParentComponent.vue --> <template><ChildComponent :message"parentMessage"></ChildComponent>…...

NineData云原生智能数据管理平台新功能发布|2024年7月版

本月发布 12 项更新&#xff0c;其中性能优化 3 项、功能优化 8 项、安全性发布 1 项。 1. 性能优化 数据复制 - SQL Server 增量性能优化 调整读取和写入方式&#xff0c;让 SQL Server 增量复制的性能轻松达到 5000 RPS 以上。 数据复制 - Doris|SelectDB|StarRocks 性能优…...

验收测试:确保软件符合业务需求和合同要求

目录 前言1. 验收测试的概念1.1 用户验收测试&#xff08;UAT&#xff09;1.2 操作验收测试&#xff08;OAT&#xff09; 2. 验收测试的主要作用2.1 确认业务需求的满足2.2 验证合同要求的实现2.3 提升用户信心 3. 验收测试在整个测试中的地位3.1 测试的最后一道关卡3.2 用户与…...

Qt | QChartView+QDateTimeAxis(日期和时间数据图表)+QPieSeries(饼图)

点击上方"蓝字"关注我们 01、QDateTimeAxis QDateTimeAxis 是 Qt 中用于图表的轴类,它专门用于处理日期和时间数据。这个类允许你在图表上显示和解释与日期和时间相关的数据点。例如,在 Qt 的图表库中,你可以使用 QDateTimeAxis 来创建一个时间序列图表,展示股票…...

用闲置的阿里云服务器使用 NPS 实现内网穿透

最近有个项目需要给外地的同事预览一下&#xff0c;但是公司没有可以公网访问的测试服务器&#xff0c;所以想到用内网穿透的方式让外地同事可以访问到我的本机。刚好我有一台阿里云的服务器&#xff0c;双十一打折买了3年&#xff0c;1000左右&#xff0c;2核8G&#xff0c;买…...

一款免费开源绿色免安装的透明锁屏工具

一款免费开源绿色免安装的透明锁屏工具 这个工具的特点就是电脑锁屏的时候&#xff0c;仍然显示原桌面&#xff0c;但是无法操作&#xff0c;需要输入密码才可以解锁。输入密码界面也是隐藏的需要按键才能显示输入密码框。 电脑★★★★★透明锁屏工具&#xff1a;https://pa…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

aurora与pcie的数据高速传输

设备&#xff1a;zynq7100&#xff1b; 开发环境&#xff1a;window&#xff1b; vivado版本&#xff1a;2021.1&#xff1b; 引言 之前在前面两章已经介绍了aurora读写DDR,xdma读写ddr实验。这次我们做一个大工程&#xff0c;pc通过pcie传输给fpga&#xff0c;fpga再通过aur…...

开源 vGPU 方案:HAMi,实现细粒度 GPU 切分

本文主要分享一个开源的 GPU 虚拟化方案&#xff1a;HAMi&#xff0c;包括如何安装、配置以及使用。 相比于上一篇分享的 TimeSlicing 方案&#xff0c;HAMi 除了 GPU 共享之外还可以实现 GPU core、memory 得限制&#xff0c;保证共享同一 GPU 的各个 Pod 都能拿到足够的资源。…...

LeetCode 2894.分类求和并作差

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 思路一详解&#xff08;遍历 判断&#xff09;&#xff1a; 思路二详解&#xff08;数学规律/公式&#xff09;&#xff1a; 代码&#xff1a; Java思路一&#xff08;遍历 判断&a…...