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

Python for循环计数丢失 遍历PDF时卡在第二个文件无法继续迭代

问题原因

核心bug在了你外层循环最后一行的写法:i=+1
这行不是「将i自增1」,而是直接把i赋值为正整数1。实际运行逻辑是:

  1. 初始i=0,第一次外层循环处理索引0对应的第一个PDF,跑完执行i=+1,i变成1
  2. 第二次外层循环处理索引1对应的第二个PDF,跑完再执行i=+1,i还是1,数值根本不会增长
  3. 之后所有外层循环迭代中i永远为1,所以会反复打开第二个PDF跑内层循环,永远不会走到第三个及以后的文件。

如果只想先解决卡文件的问题,直接把这行改成i += 1就能让外层循环正常往后迭代,下面是额外的代码优化点和整理后的完整可运行版本。

其他可优化的问题
  • 手动维护i、j两个计数器的写法冗余且容易出错,可以直接用enumerate()同步拿到索引和对应值,不用自己算下标
  • 用fitz打开的PDF文档对象用完需要显式关闭,不然处理大量文件时会占用过多文件句柄触发报错
  • Windows本地路径里的反斜杠\容易触发字符串转义问题,路径字符串前最好加r标记为原始字符串
  • 内层循环本身已经在逐页遍历PDF对象,不需要额外维护j变量调用load_page(j),直接用当前遍历到的页对象即可
修正后代码
import fitz
# 路径前加r避免转义问题
cert_location = r'G:\Materials Received\CERTS SENT\Leave_Empty_Cert_Puller\\'
filepath = df["filename"].tolist()
heatnumber= df["HeatNumber"].tolist()
certname = df["Job"].tolist()

print(filepath)
print(heatnumber)
print(certname)

# 用enumerate直接拿索引,不用手动维护i
for i, row in enumerate(certname):   
    # 用with上下文管理自动关闭文档,不用手动释放资源
    with fitz.open(filepath[i]) as doc:
        for page in doc:
            page_name = page.get_label()
            pix = page.get_pixmap()
            if page_name == heatnumber[i]:
                save_path = f"{cert_location}{certname[i]} Heat {heatnumber[i]}.png"
                pix.save(save_path)
                print("we got one")
            print(page)    
            print("missed it")
    print(row)   
    print("next Job")

内容的提问来源于stack exchange,提问作者George Gehring

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:30:35