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

Python调用PyPDF2批量读取300份PDF触发TypeError报错排查

报错根因

你遇到的TypeError: not all arguments converted during string formatting由以下直接问题导致:

  • 字符串格式化语法错误:你写的文件路径字符串"/Users/n_n/Desktop/Digitalization/reserve"中没有设置任何格式化占位符(如匹配整数的%d、匹配字符串的%s),却通过% (k)传入了循环变量,Python找不到替换参数的位置,直接抛出类型错误。
  • 路径逻辑缺失:原代码没有拼接PDF文件后缀,也没有做序号和文件名的连接,就算格式化语法改对,也会因为找不到对应文件触发后续报错。
  • 额外兼容隐患:旧版本PyPDF2直接传入路径字符串调用PdfFileReader存在概率性兼容问题,推荐先通过二进制模式打开文件句柄再传入解析器,同时新版PyPDF2已经用PdfReader替代了旧的PdfFileReader接口。
修复及完整预处理实现

以下代码直接修复读取报错,同时覆盖你提到的所有预处理规则、元数据关联逻辑:

import PyPDF2
import re
import csv
import string
# 若需处理英文停用词可引入nltk,处理中文替换为对应中文分词、停用词逻辑即可
from nltk.corpus import stopwords

# 预加载预处理资源
stop_words = set(stopwords.words('english'))
punct_trans_table = str.maketrans('', '', string.punctuation)

# 读取外部CSV元数据,建立序号到元数据的映射
# 注意根据你的CSV实际列名调整映射逻辑
metadata_dict = {}
with open("/Users/n_n/Desktop/Digitalization/your_metadata_file.csv", "r", encoding="utf-8") as csv_f:
    csv_reader = csv.DictReader(csv_f)
    for row in csv_reader:
        # 假设CSV中file_id列对应PDF的1-311序号
        file_idx = int(row["file_id"])
        metadata_dict[file_idx] = row

final_processed_data = []

for k in range(1, 312):
    # 修正路径拼接:按你的PDF实际命名规则调整,示例为reserve1.pdf、reserve2.pdf格式
    # 如果是补零命名如reserve001.pdf,改为f"/Users/n_n/Desktop/Digitalization/reserve{k:03d}.pdf"
    pdf_path = f"/Users/n_n/Desktop/Digitalization/reserve{k}.pdf"
    # 二进制模式打开文件,避免PyPDF2兼容问题
    with open(pdf_path, "rb") as pdf_f:
        reader = PyPDF2.PdfReader(pdf_f)
        # 提取全文档文本
        raw_text = ""
        for page in reader.pages:
            page_content = page.extract_text()
            if page_content:
                raw_text += page_content
    # 执行预处理规则
    # 1. 统一转小写
    text_lower = raw_text.lower()
    # 2. 移除所有标点
    text_no_punct = text_lower.translate(punct_trans_table)
    # 3. 删除停用词
    word_list = text_no_punct.split()
    text_clean = " ".join([word for word in word_list if word not in stop_words])
    # 4. 关联对应元数据
    final_processed_data.append({
        "file_id": k,
        "cleaned_content": text_clean,
        "metadata": metadata_dict.get(k, {})
    })
适配调整提示
  • 如果你的PDF命名规则和示例不一致,直接修改pdf_path的拼接逻辑即可。
  • 处理中文文本时,将英文停用词替换为中文停用词表,分词环节替换为jieba等中文分词工具即可。
  • 若出现PyPDF2版本兼容问题,执行pip install --upgrade pypdf2升级到最新稳定版即可。

内容的提问来源于stack exchange,提问作者H.Stevens

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:09:16