遇到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")
请问我哪里操作有误?
问题分析与修正
你的代码存在几个直接导致报错和功能失效的问题:
未过滤PDF文件
遍历文件夹时会处理所有类型的文件(比如txt、图片等),Aspose.Words无法解析非支持格式的文件,会触发类似找不到文件的错误(实际是无法读取非目标格式,但错误提示易误导)。必须只处理.pdf后缀的文件。文件名拼写错误
第一次保存Word文件时写的是utput.docx(少了字母O),后面却尝试读取Output.docx,系统根本找不到这个文件,这就是你看到FileNotFoundException的直接原因。输出文件重名覆盖
所有处理后的PDF都存成output.pdf,每处理一个文件就会覆盖之前的结果,最后只能得到最后一个文件的解密版,完全达不到批量处理的目的。临时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
相关产品推荐
相关产品推荐

