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 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

FunktionUnterstützt
Lesen .one Dateien (Pfad oder Stream)Ja
Extrahieren RichText.Text (Klartext)Ja
Untersuchen TextRun.Style (fett, kursiv, Hyperlink, Schriftart)Ja
Text aus Tabellenzellen extrahierenJa
Seitentitel lesenJa
Zurückschreiben an .oneNein
Verschlüsselte DokumenteNein

Nächste Schritte