Extrahera text från OneNote-filer med Python
Om du behöver läsa text från Microsoft OneNote .one filer i ett Python skript, utan att installera Microsoft Office eller köra Windows, Aspose.Note FOSS for Python är lösningen. Det är ett 100 % gratis, öppen källkod-bibliotek som parsar OneNote‑binärformatet direkt och exponerar ett rent Python-API.
Installera
pip install aspose-note
Ingen API-nyckel. Ingen licensfil. Ingen Microsoft Office.
Det enklaste tillvägagångssättet: GetChildNodes(RichText)
OneNote‑text lagras i RichText noder fördelade över sidor, konturer och konturelement. GetChildNodes(RichText) utför en rekursiv sökning av hela dokumentträdet och returnerar varje textnod som en platt lista:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
if rt.Text:
print(rt.Text)
Det här är det snabbaste sättet att få all textinnehåll ur en .one fil.
Spara text till 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")
Extrahera text per sida
När du behöver veta vilken sida varje textblock kommer från:
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)
Extrahera hyperlänkar
Hyperlänkar lagras på individuella TextRun objekt inom RichText noder. Kontrollera 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}")
Upptäck formatering: Fet, Kursiv, Understruken
Varje TextRun bär per-teckenformatering genom 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äs från en ström
Fungerar med molnlagring, HTTP-svarsbodyer eller minnesbuffertar:
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-kodningsfix
På Windows‑terminaler, sys.stdout kan använda en äldre kodning som kraschar på Unicode‑tecken. Lägg till detta i början av ditt skript:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
Vad biblioteket stödjer
| Funktion | Stöds |
|---|---|
Läs .one filer (sökväg eller ström) | Ja |
Extrahera RichText.Text (ren text) | Ja |
Inspektera TextRun.Style (fetstil, kursiv, hyperlänk, teckensnitt) | Ja |
| Extrahera text från tabellceller | Ja |
| Läs sidtitlar | Ja |
Skriv tillbaka till .one | Nej |
| Krypterade dokument | Nej |