Python遍历PDF统计指定词频出错,寻求代码修正方法
问题分析与修正方案
问题根源
你的代码存在两个核心问题:
- 全局列表未重置:
output定义在PDF遍历循环外,处理第二个PDF时,列表里还保留着第一个PDF的文本内容,导致text = str(output)是所有已处理PDF的文本合集,统计结果自然是累加值——这就是第二个结果减去第一个结果数值正确的原因。 - 冗余的文本转换:在每页循环里反复将整个
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
相关产品推荐
相关产品推荐

