Extrair texto de arquivos OneNote usando Python
Se você precisar ler texto do Microsoft OneNote .one arquivos em um script Python, sem instalar o Microsoft Office ou executar o Windows, Aspose.Note FOSS for Python é a solução. É uma biblioteca 100% gratuita e de código aberto que analisa o formato binário do OneNote diretamente e expõe uma API Python limpa.
Instalar
pip install aspose-note
Sem chave de API. Sem arquivo de licença. Sem Microsoft Office.
A abordagem mais simples: GetChildNodes(RichText)
O texto do OneNote é armazenado em RichText nodes distribuídos por páginas, outlines e elementos de outline. GetChildNodes(RichText) executa uma busca recursiva em toda a árvore do documento e retorna cada nó de texto como uma lista plana:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
if rt.Text:
print(rt.Text)
Esta é a maneira mais rápida de extrair todo o conteúdo de texto de um .one arquivo.
Salvar texto em um arquivo
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
lines = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
with open("extracted.txt", "w", encoding="utf-8") as f:
f.write("\n".join(lines))
print(f"Saved {len(lines)} text blocks to extracted.txt")
Extrair texto por página
Quando você precisa saber de qual página cada bloco de texto provém:
from aspose.note import Document, Page, RichText
doc = Document("MyNotes.one")
for page in doc.GetChildNodes(Page):
title = (
page.Title.TitleText.Text
if page.Title and page.Title.TitleText
else "(untitled)"
)
page_texts = [rt.Text for rt in page.GetChildNodes(RichText) if rt.Text]
print(f"\n=== {title} ===")
for text in page_texts:
print(text)
Extrair hyperlinks
Os hyperlinks são armazenados em TextRun objetos dentro de RichText nodes. Verifique run.Style.IsHyperlink:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
for run in rt.Runs:
if run.Style.IsHyperlink and run.Style.HyperlinkAddress:
print(f"{run.Text!r} -> {run.Style.HyperlinkAddress}")
Detectar formatação: negrito, itálico, sublinhado
Cada TextRun carrega formatação por caractere ao longo de seu TextStyle:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
for run in rt.Runs:
s = run.Style
if any([s.Bold, s.Italic, s.Underline]):
flags = ", ".join(f for f, v in [
("bold", s.Bold), ("italic", s.Italic), ("underline", s.Underline)
] if v)
print(f"[{flags}] {run.Text.strip()!r}")
Ler de um Stream
Funciona com armazenamento em nuvem, corpos de respostas HTTP ou buffers em memória:
import io, urllib.request
from aspose.note import Document, RichText
##Example: load from bytes already in memory
one_bytes = open("MyNotes.one", "rb").read()
doc = Document(io.BytesIO(one_bytes))
texts = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
print(f"Extracted {len(texts)} text block(s)")
Correção de Codificação do Windows
Nos terminais Windows, sys.stdout pode usar uma codificação legada que falha com caracteres Unicode. Adicione isso no início do seu script:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
O que a Biblioteca Suporta
| Recurso | Suportado |
|---|---|
Ler .one arquivos (caminho ou fluxo) | Sim |
Extrair RichText.Text (texto simples) | Sim |
Inspecionar TextRun.Style (negrito, itálico, hiperlink, fonte) | Sim |
| Extrair texto das células da tabela | Sim |
| Ler títulos das páginas | Sim |
Escrever de volta para .one | Não |
| Documentos criptografados | Não |