Text aus OneNote-Dateien mit Python extrahieren

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 100% freie, Open-Source-Bibliothek, die das OneNote binäre Format direkt analysiert und eine saubere Python API aussetzt.

Installieren

pip install aspose-note

Keine API-Schlüssel, keine Lizenzdatei und kein Microsoft Office.


Die einfachste Vorgehensweise: GetChildNodes(RichText)

OneNote-Text wird in der RichText Knoten, die auf Seiten, Umrisse und Umrißelemente 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 alle Textinhalte aus einem .one Die Akte.


Text in eine 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 den einzelnen TextRun Objekte innerhalb von RichText - Die Nodes. 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}")

Erkennen Sie die Formatierung: Fett, Kursiv und Unterstriche.

Jeder von ihnen TextRun die Formatierung pro Zeichen durch seine 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}")

Lesen Sie aus einem Strom

Funktioniert mit Cloud-Speicher, HTTP-Antwortkörpern oder In-Memory-Puffers:

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-Verschlüsselungsbehebung

Auf Windows-Terminals, sys.stdout kann eine alte Codierung verwenden, die auf Unicode-Zeichen abstürzt. Fügen Sie dies zu Beginn Ihres Skripts hinzu:

import sys
if hasattr(sys.stdout, "reconfigure"):
    sys.stdout.reconfigure(encoding="utf-8", errors="replace")

Was die Bibliothek unterstützt

MerkmaleUnterstützt
Lesen Sie . .one Dateien (Pfad oder Strom)- Ja , das ist gut .
Extrakt aus RichText.Text (Plain Text)- Ja , das ist gut .
Inspektion TextRun.Style (Macht, Kursivschrift, Hyperlink und Schriftart)- Ja , das ist gut .
Text aus Tabellenzellen extrahieren- Ja , das ist gut .
Lesen Sie die Seitenüberschriften.- Ja , das ist gut .
Schreiben Sie zurück an: .one- Nein .
Verschlüsselte Dokumente- Nein .

Nächste Schritte