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

Python遍历PDF统计指定词频出错,寻求代码修正方法

问题分析与修正方案

问题根源

你的代码存在两个核心问题:

  1. 全局列表未重置:output定义在PDF遍历循环外,处理第二个PDF时,列表里还保留着第一个PDF的文本内容,导致text = str(output)是所有已处理PDF的文本合集,统计结果自然是累加值——这就是第二个结果减去第一个结果数值正确的原因。
  2. 冗余的文本转换:在每页循环里反复将整个output转成字符串,完全没必要,应该等当前PDF所有页面提取完成后再合并文本。

修正后的代码

import os
from PyPDF2 import PdfReader

path = "你的PDF文件夹路径"
# 目标单词列表提至循环外,避免重复定义
target_words = ['design', 'process']

for fp in os.listdir(path):
    # 仅处理PDF文件,过滤其他格式文件
    if not fp.lower().endswith('.pdf'):
        continue
    
    # 每个PDF单独初始化文本存储,避免跨文件累加
    pdf_texts = []
    full_path = os.path.join(path, fp)
    
    # 使用with语句自动管理文件资源,无需手动关闭
    with open(full_path, 'rb') as pdf_file:
        reader = PdfReader(pdf_file)
        # 遍历所有页面提取文本
        for page in reader.pages:
            page_text = page.extract_text()
            if page_text:  # 跳过空文本页面
                pdf_texts.append(page_text)
    
    # 合并当前PDF的所有页面文本
    full_text = ' '.join(pdf_texts)
    
    # 统计目标单词出现次数
    count_result = {word: full_text.count(word) for word in target_words}
    print(f"文件 {fp} 统计结果: {count_result}")

关键修改说明

  • 将文本存储列表pdf_texts移至PDF文件循环内部,确保每个文件处理时都是全新的空列表。
  • 增加PDF文件格式判断,避免遍历到非PDF文件导致报错。
  • 使用with语句处理文件IO,自动释放资源,更安全规范。
  • 等当前PDF所有页面提取完成后再合并文本,减少不必要的字符串操作,提升效率。
  • 用字典推导式简化统计逻辑,代码更简洁易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:45:13