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

使用PyPDF2处理PDF后移动文件遇WinError 32权限问题求助

解决PyPDF2处理PDF后文件被占用的PermissionError问题

问题原因

你的代码中PdfReader(pdf_path)直接传入文件路径时,PyPDF2内部会打开文件但未显式释放文件句柄,在Windows系统的文件锁机制下,后续的shutil.move操作会因为文件被占用而抛出权限错误。另外,你手动调用的fp.close()属于多余操作,with语句会自动关闭文件句柄。

修复方案

  1. 使用with语句显式管理PdfReader的文件句柄,确保文件处理完成后立即释放。
  2. 移除多余的fp.close()调用。
  3. 修正路径写法,避免转义字符问题(将\改为/或使用原始字符串)。

修改后的完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:05:27