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)
Udtræk hyperlinks
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
| Funktion | Understø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 tabelceller | Ja |
| Læs sidetitler | Ja |
Skriv tilbage til .one | Nej |
| Krypterede dokumenter | Nej |