Python for循环计数丢失 遍历PDF时卡在第二个文件无法继续迭代
问题原因
核心bug在了你外层循环最后一行的写法:i=+1
这行不是「将i自增1」,而是直接把i赋值为正整数1。实际运行逻辑是:
- 初始i=0,第一次外层循环处理索引0对应的第一个PDF,跑完执行
i=+1,i变成1 - 第二次外层循环处理索引1对应的第二个PDF,跑完再执行
i=+1,i还是1,数值根本不会增长 - 之后所有外层循环迭代中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
相关产品推荐
相关产品推荐

