Text aus OneNote-Dateien extrahieren mit Python
Wenn Sie Text aus Microsoft OneNote lesen müssen .one Dateien in einem Python-Skript, ohne Microsoft Office zu installieren oder Windows auszuführen, Aspose.Note FOSS for Python ist die Lösung. Es ist eine zu 100 % kostenlose, Open-Source-Bibliothek, die das OneNote-Binärformat direkt analysiert und eine saubere Python-API bereitstellt.
Installieren
pip install aspose-note
Kein API‑Schlüssel. Keine Lizenzdatei. Kein Microsoft Office.
Der einfachste Ansatz: GetChildNodes(RichText)
OneNote-Text wird in RichText Knoten, die über Seiten, Gliederungen und Gliederungselemente verteilt sind. GetChildNodes(RichText) führt eine rekursive Suche im gesamten Dokumentbaum durch und gibt jeden Textknoten als flache Liste zurück:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
if rt.Text:
print(rt.Text)
Dies ist der schnellste Weg, um den gesamten Textinhalt aus einer .one Datei.
Text in einer Datei speichern
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")
Text pro Seite extrahieren
Wenn Sie wissen müssen, von welcher Seite jeder Textblock stammt:
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)
Hyperlinks extrahieren
Hyperlinks werden auf einzelnen TextRun Objekten innerhalb RichText Knoten gespeichert. Prüfen 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}")
Formatierung erkennen: Fett, Kursiv, Unterstrichen
Jeder TextRun trägt die Zeichen-für-Zeichen-Formatierung durch seine 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}")
Aus einem Stream lesen
Funktioniert mit Cloud‑Speicher, HTTP‑Antwortkörpern oder In‑Memory‑Puffern:
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)")
Windows-Codierungsfix
Auf Windows-Terminals, sys.stdout kann eine veraltete Kodierung verwenden, die bei Unicode‑Zeichen abstürzt. Füge dies am Anfang deines Skripts hinzu:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
Was die Bibliothek unterstützt
| Funktion | Unterstützt |
|---|---|
Lesen .one Dateien (Pfad oder Stream) | Ja |
Extrahieren RichText.Text (Klartext) | Ja |
Untersuchen TextRun.Style (fett, kursiv, Hyperlink, Schriftart) | Ja |
| Text aus Tabellenzellen extrahieren | Ja |
| Seitentitel lesen | Ja |
Zurückschreiben an .one | Nein |
| Verschlüsselte Dokumente | Nein |