Migración desde python-pptx
Office Oxide lee PPTX 46× más rápido que python-pptx (0,7 ms frente a 32,5 ms de media en 806 archivos), con una tasa de éxito 11,7 puntos porcentuales más alta. También lee .ppt heredado directamente — python-pptx no puede.
Cuándo migrar
Cambia si haces alguna de estas cosas:
- Extraer texto de diapositivas, notas o tablas de
.pptxpara ingesta / RAG - Convertir presentaciones a Markdown o HTML para previsualizaciones
- Ejecutar plantillas tipo buscar-y-reemplazar (“Q3 → Q4”, “{{quarter}}”, “{{growth}}”)
- Necesitar soporte de
.pptsin invocar LibreOffice - Querer una sola biblioteca que cubra también
.docx,.xlsxy formatos heredados
Sigue con python-pptx si:
- Construyes PPTX complejos desde cero con diseños personalizados, animaciones, transiciones y geometría de formas
- Necesitas control fino sobre el XML de diseño de las diapositivas
Instalación
pip uninstall python-pptx
pip install office-oxide
Chuleta comparativa
Leer todo el texto de las diapositivas
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)
Iterar por diapositiva
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)'}")
Cada sección del IR corresponde a una diapositiva. section["title"] viene del marcador de título.
Leer tablas en diapositivas
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)
Leer notas del presentador
python-pptx
for slide in prs.slides:
if slide.has_notes_slide:
print(slide.notes_slide.notes_text_frame.text)
office_oxide
plain_text() y to_markdown() incluyen las notas por defecto — se añaden al final de cada sección de diapositiva. Si necesitas las notas por separado, usa el accesor específico del formato:
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}")
Plantillas (buscar y reemplazar)
python-pptx — sin API de primera clase; el patrón habitual es recorrer el marco de texto de cada forma y reescribir. Se rompe fácilmente con coincidencias entre runs.
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 recorre cada <a:t> en todas las diapositivas y notas, y preserva todas las partes OPC no modificadas (imágenes, gráficos, diseños, temas).
Convertir a Markdown / HTML
python-pptx — nada integrado.
office_oxide
with Document.open("deck.pptx") as doc:
md = doc.to_markdown()
html = doc.to_html()
La salida Markdown es una sección ## Slide N por diapositiva, con el contenido del cuerpo y las notas añadidas como citas.
Lectura de .ppt heredado
python-pptx no puede abrir .ppt. Office Oxide las lee directamente:
from office_oxide import Document
with Document.open("legacy.ppt") as doc:
print(doc.plain_text())
doc.save_as("modern.pptx") # migración en una línea
Rendimiento
| Biblioteca | Media | p99 | Tasa de éxito |
|---|---|---|---|
| office_oxide | 0,7 ms | 3,9 ms | 98,4 % |
| python-pptx | 32,5 ms | 174 ms | 86,7 % |
Una ingesta de 100.000 presentaciones que tarda 54 minutos con python-pptx se completa en 70 segundos con office_oxide.
Qué se pierde
EditableDocument cubre el caso de plantillas. Para construir PPTX más ricos — añadir diapositivas, diseños personalizados, gráficos, animaciones — baja a office_oxide.pptx::create::PptxBuilder, o quédate en python-pptx para el paso de creación y usa office_oxide para la ingesta.
Ver también
- Reemplazar texto — semántica de
replace_texty manejo de límites de run - Office para RAG — chunking consciente de diapositivas
- Benchmarks de rendimiento