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

Python如何批量提取多子文件夹PDF文本并按指定格式存入Excel

问题修复方案

原有代码核心问题

  • 函数内变量命名冲突:循环迭代时覆盖了存储结果的列表变量,且调用append的line变量未定义,运行会直接抛出NameError
  • 文本处理逻辑不符合需求:将PDF文本按换行符拆分为独立字符串元素,最终生成的表格会把单行文本拆分到不同单元格,无法实现全文本存在同一单元格的要求
  • 文件遍历范围不足:仅用os.listdir只能读取根目录下的直接文件,无法递归获取所有子文件夹内存储的PDF
  • 输出格式不匹配:最终导出为CSV文件,且数据结构不符合指定的Excel存储规则

前置依赖安装

先执行以下命令安装需要的第三方库:
pip install pdfplumber pandas openpyxl

完整实现代码

import pdfplumber
import pandas as pd
import os

def extract_pdf_text(pdf_path):
    # 直接拼接所有页面的文本为单个完整字符串,不拆分行
    full_text = ""
    with pdfplumber.open(pdf_path) as pdf:
        for page in pdf.pages:
            page_text = page.extract_text()
            # 处理扫描页/空白页提取不到文本的情况,避免报错
            if page_text:
                full_text += page_text + "\n"
    return full_text.strip()

# 替换成你的根文件夹实际路径
root_folder = "你的根文件夹实际路径"
excel_content = []

# 递归遍历根目录下所有子文件夹、文件
for folder_path, sub_folders, file_names in os.walk(root_folder):
    for file_name in file_names:
        # 筛选PDF文件,兼容大小写后缀
        if file_name.lower().endswith(".pdf"):
            pdf_full_path = os.path.join(folder_path, file_name)
            # 按要求顺序添加:先加文件名,再加提取的完整文本
            excel_content.append(file_name)
            pdf_text = extract_pdf_text(pdf_full_path)
            excel_content.append(pdf_text)

# 构造DataFrame,所有内容存在A列
df = pd.DataFrame(excel_content, columns=None)
# 导出为Excel文件,不保存索引和表头
df.to_excel("pdf_text_result.xlsx", index=False, header=False)

效果说明

  • 自动递归遍历指定根文件夹下所有层级子文件夹内的PDF文件,兼容大小写.pdf后缀
  • 导出的Excel文件中,A1、A3、A5…奇数行单元格依次存储每个PDF的文件名,对应的A2、A4、A6…偶数行单元格存储该PDF提取的完整文本,所有文本不会拆分,全部存放在同一个单元格内
  • 自动处理空白页、扫描页无文本的情况,不会因提取结果为空抛出报错

可选格式调整

如果你需要改成「每个PDF占1行,A列存文件名、B列存对应文本」的更常见格式,只需要替换代码中遍历文件构造数据、导出Excel的部分即可:

excel_content = []
# 递归遍历根目录下所有子文件夹、文件
for folder_path, sub_folders, file_names in os.walk(root_folder):
    for file_name in file_names:
        # 筛选PDF文件,兼容大小写后缀
        if file_name.lower().endswith(".pdf"):
            pdf_full_path = os.path.join(folder_path, file_name)
            pdf_text = extract_pdf_text(pdf_full_path)
            excel_content.append([file_name, pdf_text])

# 构造带表头的DataFrame
df = pd.DataFrame(excel_content, columns=["PDF文件名", "提取文本"])
# 导出为Excel文件
df.to_excel("pdf_text_result.xlsx", index=False)

内容的提问来源于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 22:57:23