Išgauti tekstą iš OneNote failų naudojant Python

Jei jums reikia skaityti tekstą iš Microsoft OneNote .one failus Python skripte, neįdiegiant Microsoft Office ar nenaudojant Windows, Aspose.Note FOSS for Python yra sprendimas. Tai 100 % nemokama, atviro kodo biblioteka, kuri tiesiogiai analizuoja OneNote dvejetainį formatą ir pateikia švarią Python API.

Įdiegti

pip install aspose-note

Nėra API rakto. Nėra licencijos failo. Nėra Microsoft Office.


Paprastausias metodas: GetChildNodes(RichText)

OneNote tekstas saugomas RichText mazgai, paskirstyti per puslapius, struktūras ir struktūrų elementus. GetChildNodes(RichText) atlieka rekursinę visos dokumento medžio paiešką ir grąžina kiekvieną teksto mazgą kaip plokščią sąrašą:

from aspose.note import Document, RichText

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

Tai greičiausias būdas gauti visą teksto turinį iš .one failo.


Išsaugoti tekstą į failą

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

Išgauti tekstą pagal puslapį

Kai reikia žinoti, iš kurio puslapio kilęs kiekvienas teksto blokas:

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)

Išgauti nuorodas

Hipersaitai saugomi atskiruose TextRun objektuose RichText mazguose. Patikrinkite 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}")

Nustatyti formatavimą: paryškintas, kursyvas, pabrauktas

Kiekvienas TextRun neša per simbolį formatavimą per savo 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}")

Skaityti iš srauto

Veikia su debesų saugykla, HTTP atsakymų kūnais arba atminties buferiais:

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 koduotės pataisa

Windows terminaluose, sys.stdout gali naudoti seną koduotę, kuri nulūžta su Unicode simboliais. Pridėkite tai savo skripto pradžioje:

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

Ką biblioteka palaiko

FunkcijaPalaikoma
Skaityti .one failai (kelias arba srautas)Taip
Išskleisti RichText.Text (grynasis tekstas)Taip
Patikrinti TextRun.Style (pusjuodis, kursyvas, hipersaitas, šriftas)Taip
Išgauti tekstą iš lentelės langeliųTaip
Skaityti puslapių antraštesTaip
Rašyti atgal į .oneNe
Užšifruoti dokumentaiNe

Tolimesni žingsniai