Udtræk tekst fra OneNote-filer ved hjælp af Python

Hvis du har brug for at læse tekst fra Microsoft OneNote .one filer i et Python-script, uden at installere Microsoft Office eller køre Windows, Aspose.Note FOSS for Python er løsningen. Det er et 100 % gratis, open‑source bibliotek, der parser OneNote‑binærformatet direkte og eksponerer et rent Python-API.

Installer

pip install aspose-note

Ingen API-nøgle. Ingen licensfil. Ingen Microsoft Office.


Den simpleste tilgang: GetChildNodes(RichText)

OneNote‑tekst gemmes i RichText noder fordelt på sider, oversigter og oversigtselementer. GetChildNodes(RichText) udfører en rekursiv søgning af hele dokumenttræet og returnerer hver tekstnode som en flad liste:

from aspose.note import Document, RichText

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

Dette er den hurtigste måde at få al tekstindhold ud af en .one fil.


Gem tekst til 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")

Udtræk tekst pr. side

Når du har brug for at vide, hvilken side hver tekstblok kom fra:

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 gemmes på individuelle TextRun objekter inden for RichText noder. Tjek 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}")

Registrer formatering: fed, kursiv, understregning

Hver TextRun bærer per-tegn formatering gennem sin 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}")

Læs fra en stream

Fungerer med cloud-lagring, HTTP-svarlegemer eller buffers i hukommelsen:

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

På Windows‑terminaler, sys.stdout kan bruge en ældre kodning, der får programmet til at gå ned ved Unicode‑tegn. Tilføj dette i starten af dit script:

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

Hvad biblioteket understøtter

FunktionUnderstøttet
Læs .one filer (sti eller strøm)Ja
Udtræk RichText.Text (ren tekst)Ja
Inspicér TextRun.Style (fed, kursiv, hyperlink, skrifttype)Ja
Udtræk tekst fra tabelcellerJa
Læs sidetitlerJa
Skriv tilbage til .oneNej
Krypterede dokumenterNej

Næste skridt