Міграція з python-pptx
Office Oxide читає PPTX у 46 разів швидше за python-pptx (0,7 мс проти 32,5 мс у середньому на 806 файлах) і має на 11,7 відсоткового пункту вищу частку успішного розбору. Він також читає застарілий .ppt напряму — python-pptx цього не вміє.
Коли мігрувати
Перемикайтеся, якщо ви робите щось із цього:
- Витягуєте текст слайдів, нотатки або таблиці з
.pptxдля інжесту / RAG - Конвертуєте презентації в Markdown чи HTML для прев’ю
- Запускаєте шаблонізацію типу пошук-і-заміна (“Q3 → Q4”, “{{quarter}}”, “{{growth}}”)
- Потрібна підтримка
.pptбез виклику LibreOffice - Хочете одну бібліотеку, яка також покриває
.docx,.xlsxі застарілі формати
Залишайтеся на python-pptx, якщо:
- Ви будуєте складні PPTX з нуля — з кастомними макетами, анімаціями, переходами та геометрією фігур
- Потрібен дрібнозернистий контроль над XML макетів слайдів
Встановлення
pip uninstall python-pptx
pip install office-oxide
Порівняльна шпаргалка
Прочитати весь текст слайдів
python-pptx
from pptx import Presentation
prs = Presentation("deck.pptx")
for slide in prs.slides:
for shape in slide.shapes:
if shape.has_text_frame:
for para in shape.text_frame.paragraphs:
for run in para.runs:
print(run.text)
office_oxide
from office_oxide import Document
with Document.open("deck.pptx") as doc:
text = doc.plain_text()
print(text)
Ітерація по слайдах
python-pptx
prs = Presentation("deck.pptx")
for i, slide in enumerate(prs.slides, 1):
title = slide.shapes.title.text if slide.shapes.title else "(no title)"
print(f"slide {i}: {title}")
office_oxide
with Document.open("deck.pptx") as doc:
ir = doc.to_ir()
for i, section in enumerate(ir["sections"], 1):
print(f"slide {i}: {section.get('title') or '(no title)'}")
Кожна секція IR відповідає одному слайду. section["title"] береться з заголовкового плейсхолдера.
Читання таблиць на слайдах
python-pptx
for slide in prs.slides:
for shape in slide.shapes:
if shape.has_table:
for row in shape.table.rows:
cells = [c.text for c in row.cells]
print(cells)
office_oxide
with Document.open("deck.pptx") as doc:
ir = doc.to_ir()
for section in ir["sections"]:
for el in section["elements"]:
if el["kind"] == "Table":
for row in el["rows"]:
print(row)
Читання нотаток доповідача
python-pptx
for slide in prs.slides:
if slide.has_notes_slide:
print(slide.notes_slide.notes_text_frame.text)
office_oxide
plain_text() і to_markdown() за замовчуванням включають нотатки — вони додаються в кінець секції кожного слайда. Якщо потрібні нотатки окремо, використовуйте формат-специфічний аксесор:
with Document.open("deck.pptx") as doc:
pptx = doc.as_pptx()
for i, slide in enumerate(pptx.slides(), 1):
notes = slide.notes()
if notes:
print(f"slide {i} notes: {notes}")
Шаблонізація (пошук і заміна)
python-pptx — немає першокласного API; типовий патерн — обходити текстовий фрейм кожної фігури й переписувати. Легко ламається на між-run збігах.
office_oxide
from office_oxide import EditableDocument
with EditableDocument.open("deck_template.pptx") as ed:
ed.replace_text("{{quarter}}", "Q4 2026")
ed.replace_text("{{growth}}", "+18.4%")
ed.save("q4_deck.pptx")
replace_text обходить кожен <a:t> на всіх слайдах і слайдах нотаток і зберігає всі незмінені OPC-частини (зображення, діаграми, макети, теми).
Конвертація в Markdown / HTML
python-pptx — нічого вбудованого.
office_oxide
with Document.open("deck.pptx") as doc:
md = doc.to_markdown()
html = doc.to_html()
Markdown на виході — одна секція ## Slide N на слайд, із вмістом і нотатками, доданими як блоки цитат.
Читання застарілого .ppt
python-pptx не відкриває .ppt. Office Oxide читає їх напряму:
from office_oxide import Document
with Document.open("legacy.ppt") as doc:
print(doc.plain_text())
doc.save_as("modern.pptx") # міграція в один рядок
Продуктивність
| Бібліотека | Середнє | p99 | Частка успіху |
|---|---|---|---|
| office_oxide | 0,7 мс | 3,9 мс | 98,4% |
| python-pptx | 32,5 мс | 174 мс | 86,7% |
Інжест 100 000 презентацій, який на python-pptx займає 54 хвилини, на office_oxide завершується за 70 секунд.
Що втрачається
EditableDocument покриває сценарій шаблонізації. Для багатшої збірки PPTX — додавання слайдів, кастомних макетів, діаграм, анімацій — спускайтеся в office_oxide.pptx::create::PptxBuilder або залишайтеся на python-pptx для кроку створення й використовуйте office_oxide для інжесту.
Див. також
- Заміна тексту — семантика
replace_textі робота з межами run - Office для RAG — чанкування з урахуванням слайдів
- Бенчмарки продуктивності