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

Hvis du skal læse tekst fra Microsoft OneNote .one filer i et Python-skriptskrift uden at installere Microsoft Office eller køre Windows, Aspose.Note FOSS for Python Det er et 100% gratis, open-source bibliotek der analyserer OneNote binært format direkte og udstiller en ren Python API.

Installering

pip install aspose-note

Ingen API-nøgle, ingen licensfil.


Den enkleste tilgang: GetChildNodes(RichText)

OneNote-tekst gemmes i RichText Nodes fordelt på tværs af sider, skitser og skisserelementer. GetChildNodes(RichText) udfører en rekursiv søgning i hele dokumenttræet og returnerer hver tekstknode 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å alt tekstindhold ud af en .one - Filer.


Gem tekst i 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 skal 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 websteder. TextRun objekter inden for RichText - Tjek. 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}")

Finder formatering: Dyb, kursiv og understreger

Hver af dem TextRun bærer per-tegnsformatting gennem 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æse fra en strøm

Arbejder med cloud-lagring, HTTP responslegemer 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-kodning Fix

På Windows-terminaler, sys.stdout kan bruge en gammel kodning, der falder på 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 støtter

Fælles karakteristikaStøttet
Læs det. .one filer (ruten eller strømmen)- Ja, jeg gør.
Ekstrakt RichText.Text (sagt i almindelig tekst)- Ja, jeg gør.
Inspektion TextRun.Style (fuldt, kursiv, hyperlink, skrifttype)- Ja, jeg gør.
Tekstudtræk fra tabellens celler- Ja, jeg gør.
Læs sidetitler- Ja, jeg gør.
Skriv tilbage til: .one- Nej, jeg gør det ikke.
Krypterede dokumenter- Nej, jeg gør det ikke.

Næste skridt