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

使用Python转换PDF为JPG后删除原PDF遇进程占用报错求助

PDF转JPG后删除原文件占用报错解决方案

报错“该进程正被其他程序占用”的核心原因是调用fitz.open打开PDF文件后,没有主动释放文档对象,文件句柄被当前Python进程持续占用,操作系统禁止删除被占用的文件。

除此之外你的代码还存在以下可优化/修复的问题:

  • 转换循环中fitz.open(pdffile)的pdffile变量未定义,实际应该传入当前遍历的PDF文件路径
  • 第二段目录遍历逻辑中,直接将os.listdir返回的文件名传入os.remove,没有拼接根目录路径,会触发文件不存在报错
  • 第二段循环中的folder变量未定义,对应代码行属于冗余无效内容
  • 调用writePNG方法输出后缀为.jpg的文件,格式和后缀不匹配,建议统一对应

以下是修正后的完整可运行代码:

import os
import fitz

# 定义PDF文件所在目录
pdf_dir = 'D:/python_ml/Machine Learning/New folder/Invoice/'

for filename in os.listdir(pdf_dir):
    # 只处理PDF文件
    if not filename.lower().endswith('.pdf'):
        continue
    # 拼接PDF完整路径
    full_pdf_path = os.path.join(pdf_dir, filename)
    # 打开PDF文件
    doc = fitz.open(full_pdf_path)
    # 读取第一页生成图片
    page = doc.load_page(0)
    pix = page.get_pixmap()
    # 生成输出JPG的完整路径
    jpg_filename = filename.rsplit('.', 1)[0] + '.jpg'
    full_jpg_path = os.path.join(pdf_dir, jpg_filename)
    # 保存为JPG格式
    pix.save(full_jpg_path)
    # 关键:关闭文档对象,释放文件句柄
    doc.close()
    # 此时删除原PDF文件不会触发占用报错
    os.remove(full_pdf_path)

如果你使用的是较新版本的PyMuPDF库,也可以通过上下文管理器自动释放资源,无需手动调用close方法:

with fitz.open(full_pdf_path) as doc:
    page = doc.load_page(0)
    pix = page.get_pixmap()
    pix.save(full_jpg_path)
# 上下文管理器退出后自动释放文件句柄,可直接执行删除
os.remove(full_pdf_path)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:48:02