卵生猫之星际海贼团(测试版)
86.09MB · 2025-11-27
本文将带你掌握它们的使用方法与实战技巧。
| 功能 | pdfplumber | PyPDF2 |
|---|---|---|
| 提取文本 | 支持文字与表格结构 | 支持,但格式较乱 |
| 提取表格 | 强大,结构清晰 | 不支持 |
| 拆分/合并PDF | 不支持 | 支持 |
| 加密/解密 | 支持 | |
| 生成新PDF | 可简单生成 | |
| 适合场景 | 数据提取、内容分析 | 文件操作、批处理管理 |
在实战中,通常两者 配合使用:
pdfplumber 提取文本或表格内容;PyPDF2 拆分、合并或修改 PDF 文件结构。pip install pdfplumber
import pdfplumber
with pdfplumber.open("example.pdf") as pdf:
all_text = ""
for page in pdf.pages:
all_text += page.extract_text() + "n"
print(all_text)
输出示例:
Python 实战报告
作者:张三
日期:2025-11-10
内容:这是一个示例PDF文件。
pdfplumber 能准确识别文字位置,输出比 PyPDF2 更整齐。
with pdfplumber.open("example.pdf") as pdf:
page = pdf.pages[0]
text = page.extract_text()
print(text)
可以用 page.extract_words() 获取每个单词的位置信息,非常适合文字坐标分析。
pdfplumber 对表格提取特别强大,它能直接将表格结构转为 Python 列表。
import pdfplumber
import pandas as pd
with pdfplumber.open("report.pdf") as pdf:
page = pdf.pages[1]
table = page.extract_table()
df = pd.DataFrame(table[1:], columns=table[0]) # 第一行为表头
print(df)
输出结果:
姓名 部门 分数
0 张三 销售部 90
1 李四 技术部 85
2 王五 市场部 88
with pdfplumber.open("example.pdf") as pdf:
page = pdf.pages[0]
for img in page.images:
print(img)
可结合 Pillow 等库进一步保存图片。
pip install PyPDF2
from PyPDF2 import PdfReader
reader = PdfReader("example.pdf")
print("总页数:", len(reader.pages))
print("标题:", reader.metadata.title)
from PyPDF2 import PdfReader, PdfWriter
reader = PdfReader("report.pdf")
for i, page in enumerate(reader.pages):
writer = PdfWriter()
writer.add_page(page)
output_name = f"page_{i+1}.pdf"
with open(output_name, "wb") as f:
writer.write(f)
print(f"已生成: {output_name}")
每页会被拆分为独立的 PDF 文件。
from PyPDF2 import PdfMerger
merger = PdfMerger()
files = ["page_1.pdf", "page_2.pdf", "page_3.pdf"]
for f in files:
merger.append(f)
merger.write("merged.pdf")
merger.close()
print("合并完成:merged.pdf")
from PyPDF2 import PdfReader, PdfWriter
reader = PdfReader("secret.pdf")
writer = PdfWriter()
for page in reader.pages:
writer.add_page(page)
writer.encrypt("mypassword")
with open("encrypted.pdf", "wb") as f:
writer.write(f)
print("PDF已加密。")
reader = PdfReader("encrypted.pdf")
reader.decrypt("mypassword")
print(reader.pages[0].extract_text())
下面的例子演示如何结合 pdfplumber 与 pandas,提取多个 PDF 文件中的文字内容并保存为 Excel 表格。
import pdfplumber
import pandas as pd
import os
data = []
for file in os.listdir("pdfs"):
if file.endswith(".pdf"):
path = os.path.join("pdfs", file)
with pdfplumber.open(path) as pdf:
text = ""
for page in pdf.pages:
text += page.extract_text() or ""
data.append({"文件名": file, "内容": text[:200]}) # 取前200字预览
df = pd.DataFrame(data)
df.to_excel("PDF文本提取结果.xlsx", index=False)
print("已导出 PDF 文本提取结果。")
| 问题 | 解决方案 |
|---|---|
| 提取文本为空 | PDF 为扫描件,可使用 OCR 工具(如 pytesseract)识别 |
| 表格列对齐不准确 | 使用 pdfplumber 的 extract_table() 或尝试指定表格边界参数 |
| 合并后的PDF打开乱码 | 确认源文件编码正确,避免跨标准 PDF 版本混用 |
| 大量文件处理超时 | 分批执行、加入延时或使用异步处理 |
通过本文的学习,你掌握了:
这两个库搭配使用,能解决大多数企业、数据分析与文档自动化中的 PDF 处理需求。