python-pptx:处理受密码保护的PowerPoint文件

时间:2019-05-29 12:18:50

标签: python powerpoint python-pptx

我正在https://python-pptx.readthedocs.io/en/latest/user/quickstart.html上使用“从演示文稿中的幻灯片中提取所有文本”示例的稍作修改的版本,以从某些PowerPoint幻灯片中提取文本。

当我尝试使用Presentation()方法打开一些PowerPoint文件以读取文本时,我遇到了PackageNotFoundError。

这似乎是由于这样的事实,在我开始这个项目之前,我不知道有一些PowerPoint文件受到密码保护。

我显然不希望能够从受密码保护的文件中读取文本,但是有没有建议的方法来处理受密码保护的PowerPoint文件?每当我的Python脚本遇到一个脚本时,它就会死掉。

我基本上可以接受以下内容:“嗨!您尝试读取的文件可能受密码保护。正在跳过。”

我尝试使用try / except块捕获PackageNotFoundError,但是随后出现“ NameError:名称'PackageNotFoundError'未定义”。

EDIT1:这是产生错误的最小情况:

EDIT2:感谢TheGamer007的建议,请参见下面的try / catch块。

import pptx
from pptx import Presentation

password_protected_file = r"C:\Users\J69401\Documents\password_protected_file.pptx"

prs = Presentation(password_protected_file)

这是生成的错误:

Traceback (most recent call last):
  File "T:/W/Wintermute/50 Sandbox/Pownall/Python/copy files/minimal_case_opening_file.py", line 6, in <module>
    prs = Presentation(password_protected_file)
  File "C:\Anaconda3\lib\site-packages\python_pptx-0.6.18-py3.6.egg\pptx\api.py", line 28, in Presentation
    presentation_part = Package.open(pptx).main_document_part
  File "C:\Anaconda3\lib\site-packages\python_pptx-0.6.18-py3.6.egg\pptx\opc\package.py", line 125, in open
    pkg_reader = PackageReader.from_file(pkg_file)
  File "C:\Anaconda3\lib\site-packages\python_pptx-0.6.18-py3.6.egg\pptx\opc\pkgreader.py", line 33, in from_file
    phys_reader = PhysPkgReader(pkg_file)
  File "C:\Anaconda3\lib\site-packages\python_pptx-0.6.18-py3.6.egg\pptx\opc\phys_pkg.py", line 32, in __new__
    raise PackageNotFoundError("Package not found at '%s'" % pkg_file)
pptx.exc.PackageNotFoundError: Package not found at 'C:\Users\J69401\Documents\password_protected_file.pptx'

这再次是最小的情况,但是具有正常工作的try / catch块。

import pptx
from pptx import Presentation
import pptx.exc
from pptx.exc import PackageNotFoundError

password_protected_file = r"C:\Users\J69401\Documents\password_protected_file.pptx"

try:
    prs = Presentation(password_protected_file)
except PackageNotFoundError:
    print("PackageNotFoundError generated - possible password-protected file.")

0 个答案:

没有答案