在日常工作中,我们经常会遇到需要从PDF文档中提取表格数据并保存到Excel文件中的需求。手动提取不仅效率低下,还很容易出错。因此,这篇技术博客将详细讲解如何使用Python脚本自动完成这一任务。让我们开始吧!
🛠️ 准备工作
在编写脚本前,我们需要确保已经安装了处理PDF和Excel文件所需的库。
pdfplumber
: 用于从PDF文件中提取文本和表格数据。openpyxl
: 用于读取和写入Excel文件。
如果尚未安装,可以通过以下命令进行安装:
pip install pdfplumber openpyxl
📄 导入所需的库
import os # 用于文件和目录操作
import pdfplumber # 用于从PDF文件中提取数据
from openpyxl import Workbook # 用于创建和操作Excel文件
这里我们导入了三个库:
os
:用于处理文件和目录路径。pdfplumber
:用于打开PDF文件并提取数据。Workbook
:来自openpyxl
库,用于创建新的Excel工作簿。
🚀 定义提取函数
def extract_tables_from_pdf(pdf_path, keyword, output_folder):
我们定义了一个函数extract_tables_from_pdf
,它接受三个参数:pdf_path
PDF文件路径,keyword
搜索的关键字,output_folder
输出Excel文件的文件夹路径。
打开PDF文件
with pdfplumber.open(pdf_path) as pdf:
使用pdfplumber.open
函数以上下文管理器的方式打开PDF文件,这样可以确保文件在使用后正确关闭。
搜索关键字
pages_wanted = []
for index, page in enumerate(pdf.pages):
if keyword in page.extract_text():
pages_wanted.extend([index, index + 1])
break
我们遍历PDF的每一页,使用extract_text
方法提取文本并检查是否包含关键字。如果找到关键字,则将当前页和下一页的索引保存在pages_wanted
列表中,并跳出循环。
创建Excel工作簿
wb = Workbook()
wb.remove(wb.active)
创建一个新的Excel工作簿,并移除默认创建的工作表。
提取表格并保存到Excel
for i in pages_wanted:
page = pdf.pages[i]
tables = page.extract_tables()
for table in tables:
ws = wb.create_sheet(f"Sheet{i+1}")
for row in table:
ws.append(row)
对于每个包含关键字的页面,我们提取其中的表格数据,并为每个表格创建一个新的工作表(Sheet),将表格数据逐行添加到工作表中。
保存Excel文件
filename = os.path.splitext(os.path.basename(pdf_path))[0]
output_path = os.path.join(output_folder, f"{filename}.xlsx")
wb.save(output_path)
print(f"Saved {output_path}")
获取PDF文件的名称(不包括扩展名),构造输出的Excel文件路径,并保存工作簿。最后打印出保存成功的信息。
🎯 主函数
def main():
定义了一个main
函数,用于设置文件夹路径、关键字,并遍历文件夹中的PDF文件,对每个文件调用extract_tables_from_pdf
函数。
设置路径和关键字
pdf_folder = 'E:\\path_to_pdf_folder'
output_folder = 'E:\\path_to_output_folder'
keyword = "主要会计数据"
这里我们定义了PDF文件所在的文件夹路径、输出文件夹路径和需要搜索的关键字。
遍历并处理PDF文件
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for file in os.listdir(pdf_folder):
if file.lower().endswith('.pdf'):
pdf_path = os.path.join(pdf_folder, file)
try:
extract_tables_from_pdf(pdf_path, keyword, output_folder)
except Exception as e:
print(f"Error processing {pdf_path}: {e}")
如果输出文件夹不存在,我们创建它。然后遍历PDF文件夹中的所有文件,对每个PDF文件尝试提取表格,如果发生异常,我们打印错误信息。
执行主函数
if __name__ == "__main__":
main()
如果脚本被直接运行,则执行main
函数。
🎉 恭喜你!现在你已经学会了如何使用Python提取PDF中的表格数据并保存到Excel文件中。可以将这个脚本用于自动化你的数据提取任务,节省大量的时间和精力。
以上代码有疑问的可以联系作者一起交流学习