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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 08:02:32