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

遇到RuntimeError文件找不到错误,Python批量解密PDF程序排查

问题描述

我写了一段Python程序,想要遍历存放PDF文件的文件夹,通过「PDF转Word再转回PDF」的方式逐个解密PDF文件,但运行时出现错误:

RuntimeError: Proxy error(FileNotFoundException): Could not find file 'C:\Users\user\stuff\tests\pythonlearn.pdf'

我的代码如下:

import os
import aspose.words as aw  


rootdir = 'C:/Users/user/stuff/tests'


for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        a = os.path.join(subdir, file)
        doc = aw.Document(a)
        doc.save("utput.docx")
        doc = aw.Document("Output.docx")
        doc.save("output.pdf")

请问我哪里操作有误?


问题分析与修正

你的代码存在几个直接导致报错和功能失效的问题:

  1. 未过滤PDF文件
    遍历文件夹时会处理所有类型的文件(比如txt、图片等),Aspose.Words无法解析非支持格式的文件,会触发类似找不到文件的错误(实际是无法读取非目标格式,但错误提示易误导)。必须只处理.pdf后缀的文件。

  2. 文件名拼写错误
    第一次保存Word文件时写的是utput.docx(少了字母O),后面却尝试读取Output.docx,系统根本找不到这个文件,这就是你看到FileNotFoundException的直接原因。

  3. 输出文件重名覆盖
    所有处理后的PDF都存成output.pdf,每处理一个文件就会覆盖之前的结果,最后只能得到最后一个文件的解密版,完全达不到批量处理的目的。

  4. 临时Word文件未独立命名
    统一用同一个临时Word文件,不仅会覆盖,还可能因为文件占用导致报错,最好给每个原文件生成对应的临时Word,处理完后可选择删除。

修改后的代码

import os
import aspose.words as aw  

rootdir = 'C:/Users/user/stuff/tests'

for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        # 只处理PDF文件
        if not file.lower().endswith('.pdf'):
            continue
            
        # 拼接原文件的完整路径
        pdf_path = os.path.join(subdir, file)
        # 生成对应原文件的临时Word路径(避免重名)
        temp_docx_path = os.path.join(subdir, f"temp_{file.replace('.pdf', '.docx')}")
        # 生成解密后的PDF路径(原文件名后加_decrypted标识)
        output_pdf_path = os.path.join(subdir, f"{file.replace('.pdf', '_decrypted.pdf')}")
        
        try:
            # 打开PDF转成Word
            doc = aw.Document(pdf_path)
            doc.save(temp_docx_path)
            
            # 打开Word转成解密PDF
            doc = aw.Document(temp_docx_path)
            doc.save(output_pdf_path)
            
            # 可选:删除临时Word文件
            os.remove(temp_docx_path)
            print(f"处理完成:{pdf_path} -> {output_pdf_path}")
        except Exception as e:
            print(f"处理{pdf_path}时出错:{str(e)}")
            # 出错时清理临时文件
            if os.path.exists(temp_docx_path):
                os.remove(temp_docx_path)

说明

  • 新增PDF文件过滤,避免无效操作
  • 每个原文件对应独立的临时Word和输出PDF,不会重名覆盖
  • 修正了文件名拼写错误问题
  • 增加异常捕获,单个文件出错不会中断整个程序,还能清理临时文件
  • 输出处理日志,方便查看进度和错误信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:35:21