You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python批量提取多PDF文本写入Excel并记录文件名的代码修正

问题修复方案

你现有代码存在几处逻辑错误,修复后可实现批量PDF处理、对应行写入文件名、多余空格清理的全部需求。

现有代码核心问题

  • 路径遍历逻辑错误:引用了未定义的directory变量,glob匹配规则有误,会出现路径拼接错误、漏找PDF的问题
  • 写入行号错误:enumerate起始值设为1,会把内容写入A1/B1,不符合从A2/B2开始写入的要求
  • 文本提取逻辑错误:重复读取第一页内容、单页文本未做累加、直接对字符串调用join导致文本拆分混乱
  • 无空白清理逻辑:PyPDF2默认提取的文本会保留PDF排版产生的大量连续空格、无效换行,没有做归一化处理

修正后可直接运行的代码

import PyPDF2
import openpyxl
import os
import glob
import re

# 配置项 替换为你自己的实际路径
root_dir = "你的PDF存放文件夹路径/"  # 注意路径末尾要加斜杠
excel_path = "excel.xlsx"  # 替换为你的Excel文件路径

# 1. 递归获取目录下所有PDF文件的合法路径
filenames = []
for filename in glob.iglob(root_dir + '**/*.pdf', recursive=True):
    if os.path.isfile(filename):
        filenames.append(filename)

# 2. 初始化Excel文件
wb = openpyxl.load_workbook(excel_path)
sheet = wb.active
sheet.title = 'MyPDF'
# 写入表头
sheet['A1'] = 'PDF提取文本'
sheet['B1'] = 'PDF文件名'

# 3. 逐个处理PDF,从第2行开始写入内容
for row, pdf_path in enumerate(filenames, start=2):
    full_text = []
    with open(pdf_path, 'rb') as f:
        # 加strict=False兼容非标准格式PDF,避免读取报错
        pdfReader = PyPDF2.PdfFileReader(f, strict=False)
        page_count = pdfReader.numPages
        # 逐页提取文本
        for page_idx in range(page_count):
            page = pdfReader.getPage(page_idx)
            page_text = page.extractText()
            if page_text:
                # 清理多余空白:将连续空格、换行、制表符统一替换为单个空格,去除首尾无效空白
                page_text = re.sub(r'\s+', ' ', page_text).strip()
                full_text.append(page_text)
    
    # A列写入拼接后的完整文本
    sheet[f'A{row}'].value = '\n'.join(full_text)
    # B列写入对应PDF的文件名(不需要路径就保留os.path.basename,需要完整路径直接替换为pdf_path即可)
    sheet[f'B{row}'].value = os.path.basename(pdf_path)

# 4. 保存修改
wb.save(excel_path)
print(f'处理完成!共处理{len(filenames)}个PDF文件')

关键修改说明

  • 路径匹配逻辑修正:用**/*.pdf规则递归匹配所有PDF文件,移除未定义的变量,增加文件类型校验,避免把文件夹当PDF处理
  • 写入位置修正:enumerate起始行设为2,第一行预留表头,完全匹配A2/B2开始写入的要求
  • 文本提取逻辑修正:逐页提取的文本统一存入列表累加,解决重复读第一页、文本丢失、字符串错误拆分的问题
  • 多余空格处理:通过正则将所有连续空白字符归一化为单个空格,彻底解决提取文本存在大量冗余空格、换行的问题
  • 兼容性优化:读取PDF时增加strict=False参数,兼容大部分格式不规范的PDF文件,减少运行报错

如果你使用的是新版PyPDF2,PdfFileReader已被标记为弃用,可替换为PdfReader,对应调整为len(pdfReader.pages)获取页数、pdfReader.pages[page_idx]获取页面对象即可,功能逻辑完全一致。

内容的提问来源于stack exchange,提问作者Gabry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 23:16:30