下面为您详细讲解Python利用pdfplumber实现读取PDF写入Excel的完整实例教程。
第一步:导入依赖包
在使用pdfplumber、pandas和openpyxl操作PDF和Excel文件之前,请确保您已经安装了这些库。如果没有安装它们,可以使用以下命令安装:
pip install pdfplumber pandas openpyxl
然后在Python脚本中导入这些依赖包:
import pdfplumber
import pandas as pd
from openpyxl import Workbook
第二步:读取PDF文件并提取表格内容
我们使用pdfplumber库读取PDF文件并提取表格内容。为了提取PDF中的表格,需要执行以下步骤:
-
使用pdfplumber打开PDF文件
-
获取PDF文件中所有的页面,遍历它们
-
在每个页面上,获取所有的表格元素和它们的边框信息
-
针对每个表格元素,使用pandas库将它们转换为数据帧
下面是一个示例代码:
pdf_file = pdfplumber.open("example.pdf")
page_data = []
for page in pdf_file.pages:
tables = page.extract_tables({
"vertical_strategy": "text",
"horizontal_strategy": "text"
})
for table in tables:
df = pd.DataFrame(table[1:], columns=table[0])
page_data.append(df)
pdf_file.close()
# 合并所有表格并进行数据清洗
data_frame = pd.concat(page_data, ignore_index=True)
data_frame = data_frame.applymap(lambda x: x.strip() if isinstance(x, str) else x)
第三步:将数据写入Excel文件
现在,我们已经成功地将PDF文件中的表格转换为数据帧并对其进行了数据清理。下一步是将数据帧写入Excel文件。
我们使用openpyxl库创建一个新的Excel文件,并将数据帧导入Excel文件中。下面是一个示例代码:
book = Workbook()
writer = pd.ExcelWriter("output.xlsx", engine="openpyxl")
writer.book = book
data_frame.to_excel(writer, index=False, sheet_name="Sheet1")
writer.save()
这会在当前目录中创建一个名为“output.xlsx”的新Excel文件,并将数据帧写入其中。
示例说明1:更改表格提取策略
在针对表格进行元素提取时,可以使用vertical_strategy和horizontal_strategy参数来设置表格边框的提取策略。这两个参数的默认值均为“lines”。
-
vertical_strategy参数指定如何提取垂直边框,可以设置为“lines”、“text”、“explicit”或自定义函数;
-
horizontal_strategy参数指定如何提取水平边框,可以设置为“lines”、“text”、“explicit”或自定义函数。
例如,假设我们指定使用文本提取垂直边框,则提取表格元素的代码如下:
tables = page.extract_tables({
"vertical_strategy": "text",
"horizontal_strategy": "lines"
})
示例说明2:合并多个工作表
如果在PDF文件中有多个表格,则您需要将这些表格合并到一个Excel工作簿中。可以使用openpyxl的Workbook对象将多个数据帧写入单个Excel文件中的不同工作表。
例如,假设我们的PDF文件中有四个表格,并将它们存储在名为“pdf_tables”的列表中。我们可以使用以下代码将这些表格写入Excel文件的不同工作表中:
book = Workbook()
writer = pd.ExcelWriter("output.xlsx", engine="openpyxl")
writer.book = book
for i, df in enumerate(pdf_tables):
sheet_name = "Sheet{}".format(i+1)
df.to_excel(writer, index=False, sheet_name=sheet_name)
writer.save()
这会在当前目录中创建一个名为“output.xlsx”的Excel文件,并将PDF中的所有表格数据写入单个文件的不同工作表中。