如何在Python函数中返回值以实现多PDF文件指定字符串模式的总命中次数统计
解决PDF字符串匹配总次数累加问题
看起来你已经完成了单个PDF文件的匹配统计,但卡在了总次数的累加环节——核心问题是你的pdf函数没有把计算出的匹配次数返回给主逻辑,导致totalHits一直是初始值0。我帮你调整了代码,同时优化了几个细节,让功能更完整:
修改后的完整代码
import os import re import PyPDF2 as pypdf2 def pdf(name): amountOfHits = 0 try: # 显式打开PDF文件,比直接传文件名更严谨 with open(name, 'rb') as pdfFile: readObject = pypdf2.PdfFileReader(pdfFile) # 遍历PDF的所有页面(如果只需要第一页,删掉循环保留getPage(0)即可) for page_num in range(readObject.numPages): pageContent = readObject.getPage(page_num) pageExtract = pageContent.extractText() amountOfHits += len(re.findall(rePattern, pageExtract)) print(f"{name} contains {rePattern}: {amountOfHits} times.") except Exception as e: # 打印错误信息方便排查问题,可根据需求调整 print(f"Failed to process {name}: {str(e)}") # 无论成功失败都返回匹配次数,保证累加逻辑不中断 return amountOfHits rePattern = input("Pattern: ") dirContent = os.listdir() totalHits = 0 # 直接遍历文件名,比用range(len())更简洁 for filename in dirContent: # 只处理PDF文件,避免误操作其他类型文件 if filename.lower().endswith('.pdf'): single_pdf_hits = pdf(filename) totalHits += single_pdf_hits print(f"Total of {totalHits} matches across all PDF files.")
关键修改说明
- 让函数返回匹配次数:在
pdf函数里初始化amountOfHits为0,处理完成后返回这个值,主逻辑里接收并累加到totalHits。 - 优化异常处理:捕获具体异常并打印错误信息,同时确保无论是否出错都返回数值(失败时返回0),避免累加逻辑中断。
- 支持多页面统计:原代码只处理第一页,现在遍历所有页面并累加次数,如果你确实只需要第一页,删掉循环恢复
getPage(0)即可。 - 过滤PDF文件:添加了后缀判断,避免目录里的非PDF文件(比如脚本本身)被误处理。
示例运行效果
假设输入模式为1999,运行后会输出:
LoopReport 09.pdf contains 1999: 44 times.
LoopReport 10.pdf contains 1999: 37 times.
...
Total of 398 matches across all PDF files.
内容的提问来源于stack exchange,提问作者HaraldrG
相关产品推荐
相关产品推荐

