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

如何在Python中返回多份PDF提取的全部文本?代码调试求助

如何让Python PDF提取函数返回文本而非仅打印?

我写了如下Python代码,目前它能将目标文件夹中所有PDF的内容存入pages变量并可打印,但无法返回提取到的文本。我通过在该文件夹放入随机PDF测试,请问如何让它像打印那样返回提取的文本?

我的代码:

import os
import PyPDF2 as pdf
import pandas as pd
def scan_files(root):
    for path, subdirs, files in os.walk(root):
        for name in files:
            if name.endswith('.pdf'):
                #print(name)
                pdf = PyPDF2.PdfFileReader(os.path.join(path,name))
                numPages = pdf.getNumPages()
                for p in range(0, numPages):
                    pages = ''
                    page = pdf.getPage(p)
                    pages += page.extractText()
                    pages = pages.replace('\n', '')
                    #print(pages)
    return pages

问题分析与修正方案

我看了你的代码,发现几个关键问题导致无法正确返回提取的文本:

  • pages变量初始化位置错误:你在每页循环里都把pages重置为空字符串,这意味着每次只会保留当前页的文本,前面的内容都会被覆盖。
  • 命名冲突:你先用import PyPDF2 as pdf给库起了别名,后面又把pdf赋值为PdfFileReader的实例,这会覆盖原来的库别名,后续如果再调用PyPDF2的其他功能会报错。
  • 返回逻辑有漏洞:如果目标文件夹里没有PDF文件,pages变量根本没被定义,执行return pages会直接报错。

下面是修正后的代码,它会完整收集所有PDF的所有页面文本,并正确返回:

import os
import PyPDF2
import pandas as pd

def scan_files(root):
    # 在外层初始化空字符串,用来累积所有PDF的文本
    pages = ''
    for path, subdirs, files in os.walk(root):
        for name in files:
            if name.endswith('.pdf'):
                # 用新变量名避免覆盖库别名
                pdf_reader = PyPDF2.PdfFileReader(os.path.join(path, name))
                num_pages = pdf_reader.getNumPages()
                for p in range(num_pages):
                    page = pdf_reader.getPage(p)
                    # 提取当前页文本并移除换行符,追加到总文本中
                    page_text = page.extractText().replace('\n', '')
                    pages += page_text
                    # 要是需要区分不同页面,可以在这里加个分隔符,比如pages += '\n---\n'
    return pages

修正说明:

  1. 把pages的初始化移到了所有循环外面,确保能持续累积所有页面的文本。
  2. 将pdf变量改名为pdf_reader,彻底避免和PyPDF2库的命名冲突。
  3. 每页提取的文本直接追加到总pages里,不再重置变量,保证所有内容都被保留。
  4. 就算文件夹里没有PDF,pages也会以空字符串的形式返回,不会触发报错。

你可以这样测试这个函数:

# 替换成你的目标文件夹路径
extracted_text = scan_files('/path/to/your/pdf/folder')
print(extracted_text)
# 还能把提取的文本保存到本地文件
with open('all_pdf_content.txt', 'w', encoding='utf-8') as f:
    f.write(extracted_text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:07:50