Extrahera text från OneNote-filer med Python

Om du behöver läsa text från Microsoft OneNote .one filer i ett Python skript, utan att installera Microsoft Office eller köra Windows, Aspose.Note FOSS for Python är lösningen. Det är ett 100 % gratis, öppen källkod-bibliotek som parsar OneNote‑binärformatet direkt och exponerar ett rent Python-API.

Installera

pip install aspose-note

Ingen API-nyckel. Ingen licensfil. Ingen Microsoft Office.


Det enklaste tillvägagångssättet: GetChildNodes(RichText)

OneNote‑text lagras i RichText noder fördelade över sidor, konturer och konturelement. GetChildNodes(RichText) utför en rekursiv sökning av hela dokumentträdet och returnerar varje textnod som en platt lista:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    if rt.Text:
        print(rt.Text)

Det här är det snabbaste sättet att få all textinnehåll ur en .one fil.


Spara text till en fil

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

Extrahera text per sida

När du behöver veta vilken sida varje textblock kommer från:

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)

Extrahera hyperlänkar

Hyperlänkar lagras på individuella TextRun objekt inom RichText noder. Kontrollera 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}")

Upptäck formatering: Fet, Kursiv, Understruken

Varje TextRun bär per-teckenformatering genom sin 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}")

Läs från en ström

Fungerar med molnlagring, HTTP-svarsbodyer eller minnesbuffertar:

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

På Windows‑terminaler, sys.stdout kan använda en äldre kodning som kraschar på Unicode‑tecken. Lägg till detta i början av ditt skript:

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

Vad biblioteket stödjer

FunktionStöds
Läs .one filer (sökväg eller ström)Ja
Extrahera RichText.Text (ren text)Ja
Inspektera TextRun.Style (fetstil, kursiv, hyperlänk, teckensnitt)Ja
Extrahera text från tabellcellerJa
Läs sidtitlarJa
Skriv tillbaka till .oneNej
Krypterade dokumentNej

Nästa steg