让我来详细讲解一下“Python提取PDF发票信息保存Excel文件并制作EXE程序的全过程”的完整实例教程。
1. 安装Python及相关库
首先,我们需要安装Python及相关的库,这里我们使用Python 3.x版本,推荐使用Anaconda作为Python的集成开发环境。需要安装的相关库主要有以下几个:
- PyPDF2:用于读取PDF文件;
- openpyxl:用于读写Excel文件;
- pyinstaller:用于打包Python程序为可执行文件;
你可以在命令行使用以下命令来安装这些库:
conda install PyPDF2 openpyxl pyinstaller
或者使用pip:
pip install PyPDF2 openpyxl pyinstaller
2. 读取PDF文件并提取发票信息
接下来,我们需要读取PDF文件并提取其中的发票信息。以下是一个示例代码:
import PyPDF2
pdf_file = open('example.pdf', 'rb')
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
for page_num in range(pdf_reader.numPages):
page = pdf_reader.getPage(page_num)
text = page.extractText()
# 提取发票信息
# ...
这个代码片段中,我们首先打开PDF文件,然后使用PyPDF2库中的PdfFileReader类来读取PDF文件。接着,我们使用循环遍历PDF中的每一页,并提取每一页中的文本,用于接下来的发票信息提取。
对于如何提取发票信息,这取决于PDF文件中的发票信息的格式。以下是一个示例代码,用于提取发票号码、日期和总金额信息:
import re
pattern = re.compile(r'发票号码:(\d+)\n开票日期:(\d{4}-\d{2}-\d{2})\n金额合计:(¥\d+\.\d+)')
matches = pattern.findall(text)
for match in matches:
invoice_number = match[0]
invoice_date = match[1]
invoice_total = match[2]
# 将发票信息保存
# ...
这个示例代码中,我们用正则表达式匹配PDF中的发票号码、日期和总金额信息,并将其保存到变量中。
3. 写入Excel文件
接下来,我们需要将提取到的发票信息保存到Excel文件中。以下是一个示例代码:
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.append(['发票号码', '开票日期', '总金额'])
for invoice_info in all_invoice_info:
ws.append(list(invoice_info.values()))
wb.save('invoices.xlsx')
这个示例代码中,我们使用openpyxl库中的Workbook类创建一个新的Excel文件,并在该Excel文件的第一个工作表中创建一个表头。接着,我们遍历所有的发票信息,并将每张发票的信息写入到Excel文件中。
4. 打包Python程序为可执行文件
最后,我们需要将Python程序打包为可执行文件。以下是一个示例代码:
import PyInstaller.__main__
PyInstaller.__main__.run([
'extract_invoice.py',
'--onefile',
'--name=extract_invoice'
])
这个示例代码中,我们使用PyInstaller库中的run()函数将Python程序打包为一个可执行文件。一些常用的选项包括:
- --onefile:生成一个单一的可执行文件;
- --name:指定可执行文件的名称;
示例说明
- 示例1:读取并提取发票信息
假设我们有一个名为example.pdf的PDF文件,其中包含多张发票,我们需要遍历并提取每张发票的发票号码、日期和总金额信息。以下是一个示例代码:
import PyPDF2
import re
pdf_file = open('example.pdf', 'rb')
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
all_invoice_info = []
for page_num in range(pdf_reader.numPages):
page = pdf_reader.getPage(page_num)
text = page.extractText()
pattern = re.compile(r'发票号码:(\d+)\n开票日期:(\d{4}-\d{2}-\d{2})\n金额合计:(¥\d+\.\d+)')
matches = pattern.findall(text)
for match in matches:
invoice_number = match[0]
invoice_date = match[1]
invoice_total = match[2]
invoice_info = {'invoice_number': invoice_number, 'invoice_date': invoice_date, 'invoice_total': invoice_total}
all_invoice_info.append(invoice_info)
print(all_invoice_info)
在执行上述代码后,我们可以得到所有发票的发票号码、日期和总金额信息。
- 示例2:将发票信息写入Excel文件并打包为可执行文件
假设我们已经将所有发票的信息保存到了一个名为all_invoice_info的列表中,现在我们需要将这些信息写入Excel文件,并将Python程序打包为可执行文件。以下是一个示例代码:
from openpyxl import Workbook
import PyInstaller.__main__
wb = Workbook()
ws = wb.active
ws.append(['发票号码', '开票日期', '总金额'])
for invoice_info in all_invoice_info:
ws.append(list(invoice_info.values()))
wb.save('invoices.xlsx')
PyInstaller.__main__.run([
'extract_invoice.py',
'--onefile',
'--name=extract_invoice'
])
在执行上述代码后,我们将会得到一个名为invoices.xlsx的Excel文件,并且Python程序也会被打包为一个可执行文件extract_invoice.exe。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python提取PDF发票信息保存Excel文件并制作EXE程序的全过程 - Python技术站