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)
Extrage hyperlink-uri
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ționalitate | Suportat |
|---|---|
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 tabelului | Da |
| Citește titlurile paginilor | Da |
Scrie înapoi în .one | Nu |
| Documente criptate | Nu |