使用Python 实现:批量提取发票内容

在日常的财务和办公处理中,我们常常会遇到大量的 PDF 格式发票,需要从中提取关键数据,如开票公司、开票日期、发票号码和开票金额等,以便进行数据分析、财务报表制作或其他业务流程。手动提取这些数据不仅耗时费力,还容易出错。今天,我们就来分享一个使用 Python 和 PyQt5 开发的 PDF 发票数据提取工具,它可以自动化地完成这些繁琐的工作。

一、代码应用场景

这个工具主要应用于需要对大量 PDF 发票进行数据提取的场景,比如企业财务部门处理每月的发票数据、会计师事务所进行审计工作时处理客户发票等。它能够将原本需要人工逐张发票查看并记录数据的工作,转变为一键式的数据提取,大大提高了工作效率和准确性。

二、代码整体结构

整个代码主要分为三个部分:

  1. 导入必要的库:这部分代码引入了程序运行所需的各种库,包括文件操作、多线程处理、PDF 文件解析、正则表达式处理、CSV 文件写入以及 PyQt5 图形界面库。
  2. 定义图形界面类Windows类继承自QWidget,负责创建和管理图形用户界面,包括各种输入框、按钮、标签和进度条等组件的初始化和布局设置,以及用户交互事件的处理。
  3. 数据提取逻辑:在extract_data方法中,实现了从 PDF 文件中提取数据,并将数据写入 CSV 文件的核心逻辑。同时,通过多线程技术,避免了界面在数据提取过程中出现卡顿现象。

三、代码详细解析

(一)导入库

import glob
import sys
import threading
import pdfplumber
import re
import os
import csv
from PyQt5.Qt import *
  • glob:用于查找符合特定规则的文件路径名,方便获取指定目录下的所有 PDF 文件。
  • sys:提供对 Python 解释器使用或维护的一些变量的访问,以及与解释器进行交互的函数,例如获取命令行参数、退出程序等。
  • threading:实现多线程编程,使得数据提取操作可以在后台线程中进行,不影响主界面的响应。
  • pdfplumber:专门用于处理 PDF 文件的库,可以方便地提取 PDF 文件中的文本内容。
  • re:正则表达式操作库,用于在提取的 PDF 文本中搜索和匹配特定的字符串模式,以提取我们需要的数据。
  • os:提供了与操作系统进行交互的功能,例如文件和目录操作。
  • csv:用于处理 CSV 文件的读取和写入,CSV 是一种常用的表格数据存储格式。
  • from PyQt5.Qt import *:导入 PyQt5 库的所有模块,PyQt5 是 Python 的一个 GUI(图形用户界面)框架,用于创建交互式应用程序的图形界面。

(二)图形界面类定义

class Windows(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

Windows类继承自QWidget__init__方法是类的构造函数,在创建类的实例时被调用。它首先调用父类的构造函数super().__init__(),然后调用initUI方法来初始化用户界面。

def initUI(self):
    # 创建主布局
    main_layout = QVBoxLayout()
    self.setLayout(main_layout)

    # 文件选择部分布局
    file_layout = QHBoxLayout()

    # 文件地址标签
    label = QLabel("文件地址:")
    file_layout.addWidget(label)

    # 文件地址输入框
    self.text_edit = QLineEdit()
    file_layout.addWidget(self.text_edit)

    # 打开文件按钮
    open_button = QPushButton("发票位置")
    file_layout.addWidget(open_button)
    open_button.clicked.connect(self.filedir)

    main_layout.addLayout(file_layout)

    # 保存位置选择部分布局
    save_layout = QHBoxLayout()

    # 保存位置标签
    save_label = QLabel("保存位置:")
    save_layout.addWidget(save_label)

    # 保存位置输入框
    self.save_edit = QLineEdit()
    self.save_edit.setReadOnly(True)
    save_layout.addWidget(self.save_edit)

    # 选择保存位置按钮
    save_button = QPushButton("选择保存位置")
    sa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44829025

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值