乐于分享
好东西不私藏

第20天:读取PDF内容

第20天:读取PDF内容

今天学习什么?

今天我们来学习如何读取PDF文件中的内容,让Python帮你提取文字!

提取文本

基本方法:

import PyPDF2

pdf_file = open('example.pdf''rb')
pdf_reader = PyPDF2.PdfReader(pdf_file)

# 提取所有文本
all_text = ""
for page in pdf_reader.pages:
    text = page.extract_text()
    all_text += text

print(all_text)

pdf_file.close()

提取特定页面:

# 提取第一页
page1 = pdf_reader.pages[0]
text1 = page1.extract_text()
print("第一页内容:")
print(text1)

# 提取最后一页
last_page = pdf_reader.pages[-1]
text_last = last_page.extract_text()
print("最后一页内容:")
print(text_last)

实际案例

案例1:提取PDF中的所有文字

import PyPDF2

def 提取PDF文字(文件名):
try:
        pdf_file = open(文件名, 'rb')
        pdf_reader = PyPDF2.PdfReader(pdf_file)

        所有文字 = []

for i, page in enumerate(pdf_reader.pages):
            文字 = page.extract_text()
            所有文字.append(f"--- 第{i+1}页 ---\n{文字}")

        pdf_file.close()

return"\n\n".join(所有文字)
except Exception as e:
        print(f"提取失败:{e}")
return""

# 使用函数
# 文字 = 提取PDF文字('example.pdf')
# print(文字)

案例2:分析PDF内容

import PyPDF2

def 分析PDF内容(文件名):
try:
        pdf_file = open(文件名, 'rb')
        pdf_reader = PyPDF2.PdfReader(pdf_file)

        分析结果 = {
'总页数': len(pdf_reader.pages),
'每页字数': [],
'总字数'0,
'平均每页字数'0
        }

for page in pdf_reader.pages:
            文字 = page.extract_text()
            字数 = len(文字)
            分析结果['每页字数'].append(字数)
            分析结果['总字数'] += 字数

if len(pdf_reader.pages) > 0:
            分析结果['平均每页字数'] = 分析结果['总字数'] / len(pdf_reader.pages)

        print("PDF内容分析:")
        print("=" * 40)
        print(f"总页数:{分析结果['总页数']}")
        print(f"总字数:{分析结果['总字数']}")
        print(f"平均每页字数:{分析结果['平均每页字数']:.0f}")

        pdf_file.close()

return 分析结果
except Exception as e:
        print(f"分析失败:{e}")
returnNone

# 使用函数
# 分析 = 分析PDF内容('example.pdf')

案例3:搜索PDF中的关键词

import PyPDF2

def 搜索PDF关键词(文件名, 关键词):
try:
        pdf_file = open(文件名, 'rb')
        pdf_reader = PyPDF2.PdfReader(pdf_file)

        找到的页面 = []

for i, page in enumerate(pdf_reader.pages):
            文字 = page.extract_text()
if 关键词 in 文字:
                找到的页面.append(i + 1)

        pdf_file.close()

        print(f"搜索关键词:{关键词}")
        print(f"找到的页码:{找到的页面}")

return 找到的页面
except Exception as e:
        print(f"搜索失败:{e}")
return []

# 使用函数
# 找到的页码 = 搜索PDF关键词('example.pdf', 'Python')

动手实践

今天的任务:

  1. 提取PDF中的所有文字
  2. 分析PDF内容
  3. 搜索PDF中的关键词

练习1:提取并保存PDF文字

import PyPDF2

def 提取PDF并保存(源文件, 目标文件):
try:
# 提取文字
        pdf_file = open(源文件, 'rb')
        pdf_reader = PyPDF2.PdfReader(pdf_file)

        所有文字 = []
for i, page in enumerate(pdf_reader.pages):
            文字 = page.extract_text()
            所有文字.append(f"=== 第{i+1}页 ===\n{文字}")

        pdf_file.close()

# 保存到文本文件
with open(目标文件, 'w', encoding='utf-8'as f:
            f.write("\n\n".join(所有文字))

        print(f"PDF文字已保存到:{目标文件}")
returnTrue
except Exception as e:
        print(f"提取失败:{e}")
returnFalse

# 使用函数
# 提取PDF并保存('example.pdf', '提取的文字.txt')

练习2:创建PDF摘要

import PyPDF2

def 创建PDF摘要(文件名):
try:
        pdf_file = open(文件名, 'rb')
        pdf_reader = PyPDF2.PdfReader(pdf_file)

        摘要 = []
        摘要.append(f"PDF文件:{文件名}")
        摘要.append(f"总页数:{len(pdf_reader.pages)}")
        摘要.append("")

# 提取每页的前100个字
for i, page in enumerate(pdf_reader.pages):
            文字 = page.extract_text()
            前100字 = 文字[:100] + "..."if len(文字) > 100else 文字
            摘要.append(f"第{i+1}页摘要:{前100字}")

        pdf_file.close()

return"\n".join(摘要)
except Exception as e:
        print(f"创建摘要失败:{e}")
return""

# 使用函数
# 摘要 = 创建PDF摘要('example.pdf')
# print(摘要)

本章小结

今天学到了什么?

  1. 可以提取PDF中的所有文字
  2. 可以分析PDF内容
  3. 可以搜索PDF中的关键词
  4. 可以创建PDF摘要

明天预告:

明天我们将学习如何合并和拆分PDF!

练习题

  1. 如何提取PDF中的所有文字?
  2. 如何分析PDF的字数?
  3. 如何搜索PDF中的关键词?

学习心得

今天的学习心得:_______________

遇到的问题:_______________

明天要重点学习:_______________