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

Python PDF数据提取问题:提取全页数据及筛选导出至Excel方法咨询

问题解决与优化方案

一、修复仅提取第一页的问题

你的代码核心问题是return pdf_text写在了for page in reader.pages循环内部,导致循环执行第一次(处理第一页)就直接返回结果,后续页面根本没机会处理。另外代码里的subprocess.call(['test', 'forms.pdf', 'output'])属于无意义的冗余代码,建议直接删除。

修改后可提取所有页面的基础代码:

import PyPDF2

def extract_text_from_pdf(pdf_file: str) -> list[str]:
    with open(pdf_file, 'rb') as pdf:
        reader = PyPDF2.PdfReader(pdf, strict=False)
        pdf_text = []
        for page in reader.pages:
            content = page.extract_text()
            if content:  # 跳过空内容页面
                pdf_text.append(content)
        # 将return移到循环外部,确保所有页面处理完成后再返回
        return pdf_text

if __name__ == '__main__':
    extracted_text = extract_text_from_pdf('test.pdf')
    for idx, text in enumerate(extracted_text, 1):
        print(f"第{idx}页内容:\n{text}\n{'='*50}")

二、添加特殊字符筛选功能

可以在提取文本后增加过滤逻辑,精准提取包含指定特殊字符(如$、@、#)的内容片段。以下是筛选包含$字符的示例代码:

import PyPDF2

def extract_text_from_pdf(pdf_file: str, special_char: str = None) -> list[str]:
    filtered_text = []
    with open(pdf_file, 'rb') as pdf:
        reader = PyPDF2.PdfReader(pdf, strict=False)
        for page_num, page in enumerate(reader.pages, 1):
            content = page.extract_text()
            if not content:
                continue
            # 若指定特殊字符,只保留包含该字符的行
            if special_char:
                lines = content.split('\n')
                matched_lines = [line.strip() for line in lines if special_char in line]
                if matched_lines:
                    filtered_text.append(f"第{page_num}页匹配内容:\n" + '\n'.join(matched_lines))
            else:
                filtered_text.append(f"第{page_num}页内容:\n{content}")
        return filtered_text

if __name__ == '__main__':
    # 提取包含$的内容
    extracted_text = extract_text_from_pdf('test.pdf', special_char='$')
    for text in extracted_text:
        print(text + '\n' + '='*50)

三、导出结果到Excel文件

使用pandas库可以快速将提取内容导出为Excel文件,先安装依赖:pip install pandas openpyxl

完整功能代码:

import PyPDF2
import pandas as pd

def extract_text_from_pdf(pdf_file: str, special_char: str = None) -> list[dict]:
    result_data = []
    with open(pdf_file, 'rb') as pdf:
        reader = PyPDF2.PdfReader(pdf, strict=False)
        for page_num, page in enumerate(reader.pages, 1):
            content = page.extract_text()
            if not content:
                continue
            page_content = ""
            if special_char:
                lines = content.split('\n')
                matched_lines = [line.strip() for line in lines if special_char in line]
                page_content = '\n'.join(matched_lines)
            else:
                page_content = content
            # 用字典存储每页数据,方便转换为表格格式
            result_data.append({
                "页码": page_num,
                "内容": page_content
            })
    return result_data

if __name__ == '__main__':
    # 提取包含$的内容并导出到Excel
    extracted_data = extract_text_from_pdf('test.pdf', special_char='$')
    df = pd.DataFrame(extracted_data)
    df.to_excel('提取结果.xlsx', index=False, engine='openpyxl')
    print("导出完成,文件名为:提取结果.xlsx")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:57:56