Extrage text din fișiere OneNote utilizând Python

Dacă trebuie să citiți text din Microsoft OneNote .one fișiere într-un script Python, fără a instala Microsoft Office sau a rula Windows, Aspose.Note FOSS for Python este soluția. Este o bibliotecă 100% gratuită, open-source, care analizează direct formatul binar OneNote și expune un API Python curat.

Instalare

pip install aspose-note

Fără cheie API. Fără fișier de licență. Fără Microsoft Office.


Cea mai simplă abordare: GetChildNodes(RichText)

Textul OneNote este stocat în RichText noduri distribuite pe pagini, contururi și elemente de contur. GetChildNodes(RichText) efectuează o căutare recursivă a întregului arbore de documente și returnează fiecare nod de text ca o listă plată:

from aspose.note import Document, RichText

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

Aceasta este cea mai rapidă metodă de a extrage tot conținutul text dintr-un .one fișier.


Salvează textul într-un fișier

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

Extrage textul pe pagină

Când ai nevoie să știi de pe ce pagină provine fiecare bloc de text:

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)

Hiperlink-urile sunt stocate pe individual TextRun obiecte în RichText noduri. Verificați 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}")

Detectează formatarea: Îngroșat, Cursiv, Subliniat

Fiecare TextRun păstrează formatarea pe caracter prin 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}")

Citește dintr-un flux

Funcționează cu stocare în cloud, corpuri de răspuns HTTP sau buffer‑e în memorie:

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

Remediere codare Windows

Pe terminalele Windows, sys.stdout poate folosi o codare veche care se blochează la caractere Unicode. Adăugați acest lucru la începutul scriptului:

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

Ce suportă biblioteca

FuncționalitateSuportat
Citește .one fișiere (cale sau flux)Da
Extrage RichText.Text (text simplu)Da
Inspectează TextRun.Style (îngroșat, cursiv, hyperlink, font)Da
Extrage textul din celulele tabeluluiDa
Citește titlurile paginilorDa
Scrie înapoi în .oneNu
Documente criptateNu

Pași următori