Estrai testo dai file OneNote usando Python
Se hai bisogno di leggere il testo da Microsoft OneNote .one file in uno script Python, senza installare Microsoft Office o eseguire Windows, Aspose.Note FOSS for Python è la soluzione. È una libreria 100% gratuita, open-source che analizza direttamente il formato binario di OneNote ed espone una pulita API Python.
Installa
pip install aspose-note
Nessuna chiave API. Nessun file di licenza. Nessun Microsoft Office.
L’approccio più semplice: GetChildNodes(RichText)
Il testo di OneNote è memorizzato in RichText nodi distribuiti tra pagine, schemi e elementi di schema. GetChildNodes(RichText) esegue una ricerca ricorsiva dell’intero albero del documento e restituisce ogni nodo di testo come un elenco piatto:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
if rt.Text:
print(rt.Text)
Questo è il modo più veloce per estrarre tutto il contenuto testuale da un .one file.
Salva il testo in un file
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")
Estrai il testo per pagina
Quando hai bisogno di sapere da quale pagina proviene ogni blocco di testo:
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)
Estrai i collegamenti ipertestuali
I collegamenti ipertestuali sono memorizzati su singoli TextRun oggetti all’interno di RichText nodi. Controlla 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}")
Rileva formattazione: Grassetto, Corsivo, Sottolineato
Ogni TextRun porta la formattazione per carattere attraverso il suo 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}")
Leggi da uno stream
Funziona con l’archiviazione cloud, i corpi di risposta HTTP o buffer in memoria:
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)")
Correzione della codifica su Windows
Sui terminali Windows, sys.stdout potrebbe usare una codifica legacy che si blocca con caratteri Unicode. Aggiungi questo all’inizio del tuo script:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
Cosa supporta la libreria
| Funzionalità | Supportato |
|---|---|
Leggi .one file (percorso o flusso) | Sì |
Estrarre RichText.Text (testo semplice) | Sì |
Ispeziona TextRun.Style (grassetto, corsivo, collegamento ipertestuale, carattere) | Sì |
| Estrarre il testo dalle celle della tabella | Sì |
| Leggere i titoli delle pagine | Sì |
Scrivi di nuovo su .one | No |
| Documenti crittografati | No |