Migration von python-pptx
Office Oxide liest PPTX 46× schneller als python-pptx (0,7 ms gegenüber 32,5 ms Mittelwert über 806 Dateien), mit einer um 11,7 Prozentpunkte höheren Erfolgsquote. Legacy-.ppt liest es direkt — python-pptx kann das nicht.
Wann migrieren
Wechseln Sie, wenn Sie eines dieser Dinge tun:
- Slide-Text, Notizen oder Tabellen aus
.pptxfür Ingest / RAG extrahieren - Decks zu Markdown oder HTML für Previews konvertieren
- Find-and-Replace-Templating ausführen (“Q3 → Q4”, “{{quarter}}”, “{{growth}}”)
.ppt-Support brauchen, ohne LibreOffice aufzurufen- Eine Bibliothek wollen, die auch
.docx,.xlsxund Legacy-Formate abdeckt
Bleiben Sie bei python-pptx, wenn:
- Sie komplexe PPTX von Grund auf bauen — mit Custom-Layouts, Animationen, Übergängen und Shape-Geometrie
- Sie feingranulare Kontrolle über das Slide-Layout-XML brauchen
Installation
pip uninstall python-pptx
pip install office-oxide
Spickzettel im Direktvergleich
Gesamten Slide-Text lesen
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)
Slide-weise iterieren
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)'}")
Jede IR-Section entspricht einem Slide. section["title"] kommt aus dem Title-Placeholder.
Tabellen auf Slides lesen
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)
Sprechernotizen lesen
python-pptx
for slide in prs.slides:
if slide.has_notes_slide:
print(slide.notes_slide.notes_text_frame.text)
office_oxide
plain_text() und to_markdown() enthalten Notizen standardmäßig — sie werden am Ende der jeweiligen Slide-Section angehängt. Wenn Sie Notizen separat brauchen, nutzen Sie den formatspezifischen Accessor:
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}")
Templating (Find-and-Replace)
python-pptx — kein erstklassiges API; gängiges Muster ist, den Textrahmen jeder Shape zu durchlaufen und zu überschreiben. Bricht leicht bei Run-übergreifenden Treffern.
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 durchläuft jedes <a:t> auf allen Slides und Notes-Slides und erhält alle unveränderten OPC-Teile (Bilder, Charts, Layouts, Themes).
Konvertierung zu Markdown / HTML
python-pptx — nichts eingebaut.
office_oxide
with Document.open("deck.pptx") as doc:
md = doc.to_markdown()
html = doc.to_html()
Die Markdown-Ausgabe besteht aus einem ## Slide N-Abschnitt pro Slide, mit Body-Inhalt und Notizen als Blockquotes angehängt.
Legacy-.ppt lesen
python-pptx kann .ppt nicht öffnen. Office Oxide liest sie direkt:
from office_oxide import Document
with Document.open("legacy.ppt") as doc:
print(doc.plain_text())
doc.save_as("modern.pptx") # Einzeiler-Migration
Performance
| Bibliothek | Mittel | p99 | Erfolgsquote |
|---|---|---|---|
| office_oxide | 0,7 ms | 3,9 ms | 98,4 % |
| python-pptx | 32,5 ms | 174 ms | 86,7 % |
Ein Ingest von 100 000 Decks, der mit python-pptx 54 Minuten dauert, läuft mit office_oxide in 70 Sekunden durch.
Was verloren geht
EditableDocument deckt den Templating-Anwendungsfall ab. Für reichhaltigere PPTX-Konstruktion — Slides hinzufügen, Custom-Layouts, Charts, Animationen — steigen Sie in office_oxide.pptx::create::PptxBuilder ab oder bleiben für den Creation-Schritt bei python-pptx und nutzen office_oxide für den Ingest.
Siehe auch
- Text ersetzen —
replace_text-Semantik und Run-Grenzen-Handling - Office für RAG — slide-aware Chunking
- Performance-Benchmarks