使用PyPDF2处理PDF后移动文件遇WinError 32权限问题求助
解决PyPDF2处理PDF后文件被占用的PermissionError问题
问题原因
你的代码中PdfReader(pdf_path)直接传入文件路径时,PyPDF2内部会打开文件但未显式释放文件句柄,在Windows系统的文件锁机制下,后续的shutil.move操作会因为文件被占用而抛出权限错误。另外,你手动调用的fp.close()属于多余操作,with语句会自动关闭文件句柄。
修复方案
- 使用
with语句显式管理PdfReader的文件句柄,确保文件处理完成后立即释放。 - 移除多余的
fp.close()调用。 - 修正路径写法,避免转义字符问题(将
\改为/或使用原始字符串)。
修改后的完整代码
import sys import os import shutil from PyPDF2 import PdfReader, PdfWriter pdf_path = "12-1805-0001842092-00.pdf" # 使用with语句管理PdfReader的文件句柄,确保释放 with open(pdf_path, 'rb') as f: reader = PdfReader(f) writer = PdfWriter() for i in range(0, len(reader.pages) - 1, 2): lhs = reader.pages[i] rhs = reader.pages[i + 1] lhs.mergeTranslatedPage(rhs, float(lhs.mediabox.right), 0, True) writer.add_page(lhs) sys.stdout.flush() # with语句自动关闭文件,无需手动调用fp.close() with open(pdf_path, "wb") as fp: writer.write(fp) # 创建目标文件夹 if not os.path.exists("1805"): os.mkdir("1805") # 使用正斜杠避免转义问题,或用r"prodcode\" shutil.move(pdf_path, f"prodcode/{pdf_path}")
额外说明
- Windows系统对文件锁的管控更严格,必须确保所有操作文件的句柄都被正确释放后,才能进行移动、删除等操作。
- 使用
with语句是Python中管理资源(如文件、网络连接)的标准做法,能有效避免资源泄漏问题。
内容的提问来源于stack exchange,提问作者Vipul Bhatt
相关产品推荐
相关产品推荐

