python-pptx: работа с защищенными паролем файлами PowerPoint - PullRequest
1 голос
/ 29 мая 2019

Я использую слегка измененную версию примера «Извлечь весь текст из слайдов в презентацию» по адресу https://python -pptx.readthedocs.io / en / latest / user / quickstart.html для извлечь текст из некоторых слайдов PowerPoint.

Я получаю PackageNotFoundError, когда пытаюсь использовать метод Presentation (), чтобы открыть некоторые файлы PowerPoint для чтения текста.

Похоже, это связано с тем, что до того, как я начал этот проект, мне неизвестно, что некоторые файлы PowerPoint защищены паролем.

Я, очевидно, не ожидаю, что смогу читать текст из файла, защищенного паролем, но есть ли рекомендуемый способ работы с файлами PowerPoint, защищенными паролем? Мой сценарий Python умирает каждый раз, когда он сталкивается с одним, раздражает.

Я бы согласился с тем, что в основном звучало так: «Привет! Файл, который вы пытаетесь прочитать, может быть защищен паролем. Пропуск.»

Я попытался использовать блок try / Кроме того, чтобы перехватить PackageNotFoundError, но затем я получил «NameError: имя« PackageNotFoundError »не определено».

EDIT1: вот минимальный случай, когда генерируется ошибка:

EDIT2: см. Ниже рабочий блок try / catch, благодаря предложению TheGamer007.

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.")
...