使用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
相关产品推荐
相关产品推荐

