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

使用PyPDF2提取PDF文本至Excel无数据显示问题求助

嘿,我来帮你排查这个“程序不报错但Excel只出表头”的问题!这种情况大概率是数据提取环节没拿到内容,或者写入Excel时的逻辑有疏漏,咱们一步步拆解:

排查步骤

1. 先确认PDF文本是否被正确提取

很多PDF可能是扫描生成的图片格式、加密文件,或者排版特殊导致提取不到文本。先加一段调试代码,把每页提取到的原始内容打出来看看:

# 假设你用的是PyPDF2或pdfplumber,以pdfplumber为例
import pdfplumber

with pdfplumber.open("你的文件.pdf") as pdf:
    for idx, page in enumerate(pdf.pages):
        raw_text = page.extract_text()
        print(f"=== 第{idx+1}页原始文本 ===")
        print(raw_text if raw_text else "当前页未提取到任何文本!")

如果打印结果是空的或者乱码,那问题根源在PDF文本提取:

  • 若是扫描件,得用OCR工具(比如pytesseract)配合处理;
  • 换个更稳定的PDF库,比如pdfplumber比PyPDF2更擅长复杂排版的文本提取。

2. 检查正则表达式是否精准匹配数据

你的目标格式是Loan #: 0065192080/3000009289 Pool#: AK1576 Borrower: David h Theman,正则必须能准确捕获这四个字段。试试这段调试代码验证匹配效果:

import re

# 适配格式的正则(注意空格、特殊符号的匹配)
pattern = r"Loan #: (\d+)\/(\d+) Pool#: (\S+) Borrower: (.+)"
# 如果文本有换行,加re.DOTALL参数:pattern = r"Loan #: (\d+)\/(\d+)\s+Pool#: (\S+)\s+Borrower: (.+)", flags=re.DOTALL

# 用提取到的raw_text测试匹配
match_result = re.search(pattern, raw_text)
if match_result:
    loan_id1 = match_result.group(1)
    loan_id2 = match_result.group(2)
    pool_num = match_result.group(3)
    borrower = match_result.group(4)
    print(f"匹配成功:{loan_id1}, {loan_id2}, {pool_num}, {borrower}")
else:
    print("当前页未匹配到目标数据!")

如果匹配失败,要调整正则:比如PDF里的Loan #可能写成Loan#(无空格),或者字段之间有换行,那就把正则里的空格换成\s+匹配任意空白字符,或者加上re.DOTALL处理跨行内容。

3. 验证Excel写入逻辑是否正确

如果你用pandas:

要确保提取到的数据被正确追加到列表,最后确实执行了写入操作:

import pandas as pd

data_rows = []  # 初始化列表存所有页的数据

# 遍历每页提取数据后,追加到列表
if match_result:
    data_rows.append({
        "贷款编号1": loan_id1,
        "贷款编号2": loan_id2,
        "Pool#": pool_num,
        "借款人": borrower
    })

# 最后写入Excel(别漏了index=False,避免生成多余的索引列)
df = pd.DataFrame(data_rows)
df.to_excel("输出文件.xlsx", index=False)

如果你用openpyxl:

要注意不要在循环里重复创建Workbook(会覆盖之前的数据),且必须执行save():

from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws.append(["贷款编号1", "贷款编号2", "Pool#", "借款人"])  # 写入表头

# 遍历每页提取数据后,追加行
if match_result:
    ws.append([loan_id1, loan_id2, pool_num, borrower])

wb.save("输出文件.xlsx")  # 这一步绝对不能忘!

4. 检查分页遍历逻辑

比如用PyPDF2时,页数遍历是否正确:

from PyPDF2 import PdfReader

reader = PdfReader("你的文件.pdf")
# 确保遍历所有页:range(len(reader.pages))
for page_num in range(len(reader.pages)):
    page = reader.pages[page_num]
    # 提取文本、匹配数据...

别犯“只遍历了第一页”或者索引越界的错误。

按这个顺序排查,基本能找到问题所在——大概率是文本没提取到,或者正则没匹配上,导致没有数据写入Excel。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:55:02