Extrahovať text z OneNote súborov pomocou Python
Ak potrebujete čítať text z Microsoft OneNote .one súbory v Python skripte, bez inštalácie Microsoft Office alebo spúšťania Windowsu, Aspose.Note FOSS for Python je riešením. Ide o 100 % bezplatnú, open-source knižnicu, ktorá priamo parsuje binárny formát OneNote a poskytuje čisté Python API.
Inštalácia
pip install aspose-note
Žiadny API kľúč. Žiadny licenčný súbor. Žiadny Microsoft Office.
Najjednoduchší prístup: GetChildNodes(RichText)
Text OneNote je uložený v RichText uzloch rozmiestnených naprieč stránkami, osnovami a prvkami osnovy. GetChildNodes(RichText) vykoná rekurzívne vyhľadávanie v celom stromu dokumentu a vráti každý textový uzol ako plochý zoznam:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
if rt.Text:
print(rt.Text)
Toto je najrýchlejší spôsob, ako získať celý textový obsah z .one súboru.
Uložiť text do súboru
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")
Extrahovať text po stránkach
Keď potrebujete vedieť, z ktorej stránky pochádza každý textový blok:
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)
Extrahovať hyperodkazy
Hyperlinky sú uložené na jednotlivých TextRun objektoch v rámci RichText uzlov. Skontrolujte run.Style.IsHyperlink:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
for run in rt.TextRuns:
if run.Style.IsHyperlink and run.Style.HyperlinkAddress:
print(f"{run.Text!r} -> {run.Style.HyperlinkAddress}")
Detekovať formátovanie: tučné, kurzíva, podčiarknuté
Každý TextRun nesie formátovanie na úrovni znaku prostredníctvom svojho TextStyle:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
for run in rt.TextRuns:
s = run.Style
if any([s.IsBold, s.IsItalic, s.IsUnderline]):
flags = ", ".join(f for f, v in [
("bold", s.IsBold), ("italic", s.IsItalic), ("underline", s.IsUnderline)
] if v)
print(f"[{flags}] {run.Text.strip()!r}")
Čítať zo streamu
Funguje s cloudovým úložiskom, telami HTTP odpovedí alebo pamäťovými buffermi:
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)")
Oprava kódovania pre Windows
Na Windows termináloch, sys.stdout môže používať staré kódovanie, ktoré spôsobuje pád pri Unicode znakoch. Pridajte toto na začiatok vášho skriptu:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
Čo knižnica podporuje
| Funkcia | Podporované |
|---|---|
Čítať .one súbory (cesta alebo prúd) | Áno |
Extrahovať RichText.Text (obyčajný text) | Áno |
Skontrolovať TextRun.Style (tučný, kurzíva, hyperodkaz, písmo) | Áno |
| Extrahovať text z buniek tabuľky | Áno |
| Čítať názvy stránok | Áno |
Zapísať späť do .one | Nie |
| Šifrované dokumenty | Nie |