Migração a partir do python-pptx
O Office Oxide lê PPTX 46× mais rápido que o python-pptx (0,7 ms contra 32,5 ms em média em 806 arquivos), com taxa de sucesso 11,7 pontos percentuais maior. Também lê .ppt legado diretamente — o python-pptx não consegue.
Quando migrar
Troque se você faz qualquer uma destas coisas:
- Extrai texto de slides, notas ou tabelas de
.pptxpara ingestão / RAG - Converte apresentações em Markdown ou HTML para previews
- Executa templating tipo find-and-replace (“Q3 → Q4”, “{{quarter}}”, “{{growth}}”)
- Precisa de suporte a
.pptsem chamar o LibreOffice - Quer uma única biblioteca que cubra também
.docx,.xlsxe formatos legados
Fique no python-pptx se:
- Você constrói PPTX complexos do zero, com layouts personalizados, animações, transições e geometria de formas
- Precisa de controle fino sobre o XML de layout dos slides
Instalação
pip uninstall python-pptx
pip install office-oxide
Guia rápido lado a lado
Ler todo o texto dos slides
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 slide
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 seção do IR corresponde a um slide. section["title"] vem do placeholder de título.
Ler tabelas em slides
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)
Ler notas do apresentador
python-pptx
for slide in prs.slides:
if slide.has_notes_slide:
print(slide.notes_slide.notes_text_frame.text)
office_oxide
plain_text() e to_markdown() incluem as notas por padrão — elas são anexadas ao fim da seção de cada slide. Se precisar das notas separadamente, use o acessor específico do 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}")
Templating (find-and-replace)
python-pptx — sem API de primeira classe; o padrão comum é percorrer o text frame de cada shape e reescrever. Fácil de quebrar em correspondências 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 percorre cada <a:t> de todos os slides e notes-slides e preserva todas as partes OPC não modificadas (imagens, gráficos, layouts, temas).
Converter para Markdown / HTML
python-pptx — nada embutido.
office_oxide
with Document.open("deck.pptx") as doc:
md = doc.to_markdown()
html = doc.to_html()
A saída em Markdown tem uma seção ## Slide N por slide, com o conteúdo e as notas anexadas como blockquotes.
Lendo .ppt legado
O python-pptx não abre .ppt. O Office Oxide lê diretamente:
from office_oxide import Document
with Document.open("legacy.ppt") as doc:
print(doc.plain_text())
doc.save_as("modern.pptx") # migração em uma linha
Desempenho
| Biblioteca | Média | p99 | Taxa de sucesso |
|---|---|---|---|
| office_oxide | 0,7 ms | 3,9 ms | 98,4% |
| python-pptx | 32,5 ms | 174 ms | 86,7% |
Uma ingestão de 100.000 apresentações que leva 54 minutos com python-pptx termina em 70 segundos com office_oxide.
O que se perde
O EditableDocument cobre o caso de templating. Para construção de PPTX mais rica — adicionar slides, layouts personalizados, gráficos, animações — desça até office_oxide.pptx::create::PptxBuilder, ou fique no python-pptx para a etapa de criação e use o office_oxide para a ingestão.
Veja também
- Substituir texto — semântica de
replace_texte tratamento de fronteiras de run - Office para RAG — chunking com consciência de slides
- Benchmarks de desempenho