Hvordan hente ut tekst fra OneNote-filer i Python
Microsoft OneNote .one-filer er binære dokumenter som ikke kan leses som ren tekst eller parses med generiske XML‑verktøy. Aspose.Note FOSS for Python tilbyr en ren‑Python‑parser som laster .one-filer inn i en fullstendig dokumentobjektmodell (DOM), noe som gjør det enkelt å hente ut tekst, formateringsmetadata og hyperkoblinger programmatisk.
Fordeler med å bruke Aspose.Note FOSS for Python
- Ingen Microsoft Office kreves: les
.one‑filer på hvilken som helst plattform, inkludert Linux CI/CD‑servere - Full tilgang til tekst og formatering: ren tekst, fet/kurvet/understreket tekst, skriftegenskaper og hyperkoblings‑URL‑er
- Gratis og åpen kildekode: MIT‑lisens, ingen bruksavgifter eller API‑nøkler
Trinn-for-trinn guide
Steg 1: Installer Aspose.Note FOSS for Python
Installer biblioteket fra PyPI. Kjernepakken har ingen obligatoriske avhengigheter:
pip install aspose-noteBekreft installasjonen:
from aspose.note import Document
print("Installation OK")Trinn 2: Last inn .one-filen
Opprett en Document-instans ved å sende filstien:
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Section: {doc.DisplayName}")
print(f"Pages: {len(list(doc))}")For å laste fra en binær strøm (f.eks. fra skylagring eller et HTTP‑svar):
from aspose.note import Document
with open("MyNotes.one", "rb") as f:
doc = Document(f)Trinn 3: Ekstraher all ren tekst
Bruk GetChildNodes(RichText) for å samle hver RichText‑node i dokumenttreet. Dette utfører et rekursivt dybde‑først‑søk på tvers av alle sider, disposisjoner og disposisjonselementer:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
texts = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
for text in texts:
print(text)For å lagre all tekst til en fil:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
texts = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
with open("extracted_text.txt", "w", encoding="utf-8") as out:
out.write("\n".join(texts))
print(f"Wrote {len(texts)} text blocks to extracted_text.txt")Steg 4: Inspiser formaterte løp
Hver RichText node inneholder en TextRuns liste over TextRun segmenter. Hver kjøring har en uavhengig TextStyle med per‑tegn formatering:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
for run in rt.TextRuns:
style = run.Style
attrs = []
if style.IsBold: attrs.append("bold")
if style.IsItalic: attrs.append("italic")
if style.IsUnderline: attrs.append("underline")
if style.IsStrikethrough: attrs.append("strikethrough")
if style.FontName: attrs.append(f"font={style.FontName}")
if style.FontSize: attrs.append(f"size={style.FontSize}pt")
label = ", ".join(attrs) if attrs else "plain"
print(f"[{label}] {run.Text!r}")Trinn 5: Ekstraher hyperkoblinger
Hyperkoblinger lagres på individuelle TextRun noder. Sjekk Style.IsHyperlink og les Style.HyperlinkAddress:
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"Link text: {run.Text!r}")
print(f"URL: {run.Style.HyperlinkAddress}")Steg 6: Hent tekst per side
For å hente ut tekst organisert etter sidetittel:
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)"
)
print(f"\n=== {title} ===")
for rt in page.GetChildNodes(RichText):
if rt.Text:
print(rt.Text)Vanlige problemer og løsninger
1. ImportError: Ingen modul med navn ‘aspose’
Årsak: Pakken er ikke installert i det aktive Python-miljøet.
Fiks:
pip install aspose-note
##Confirm active environment:
pip show aspose-note2. FileNotFoundError når du laster .one‑fil
Årsak: Filstien er feil eller filen finnes ikke.
Løsning: Bruk en absolutt sti eller verifiser at filen finnes før lasting:
from pathlib import Path
from aspose.note import Document
path = Path("MyNotes.one")
if not path.exists():
raise FileNotFoundError(f"File not found: {path.resolve()}")
doc = Document(str(path))3. UnicodeEncodeError på Windows ved utskrift
Årsak: Windows-terminaler kan bruke en eldre koding som ikke kan gjengi Unicode-tegn.
Løsning: Konfigurer stdout på nytt i begynnelsen av skriptet ditt:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")4. Tom tekstresultat
Årsak: Filen .one kan være tom, inneholde kun bilder eller tabeller (ingen RichText‑noder), eller være en notatbokfil (.onetoc2) i stedet for en seksjonsfil (.one).
Fix: Sjekk sideantallet og inspiser nodetypene:
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")
for page in doc:
print(f" Children: {sum(1 for _ in page)}")5. IncorrectPasswordException
Årsak: .one-filen er kryptert. Krypterte dokumenter støttes ikke.
Fiks: Aspose.Note FOSS for Python støtter ikke krypterte .one‑filer. Det fullfunksjonelle kommersielle Aspose.Note‑produktet støtter dekryptering.
Ofte stilte spørsmål
Kan jeg hente tekst fra alle sider på én gang?
Ja. doc.GetChildNodes(RichText) søker gjennom hele dokumenttreet rekursivt, inkludert alle sider, disposisjoner og disposisjonselementer.
Støtter biblioteket .onetoc2‑notatbokfiler?
Nei. Biblioteket håndterer kun .one seksjonsfiler. Notebook‑innholdsfortegnelsesfiler (.onetoc2) er et annet format og støttes ikke.
Kan jeg hente ut tekst fra tabeller?
Ja. TableCell noder inneholder RichText barn som kan leses på samme måte:
from aspose.note import Document, Table, TableRow, TableCell, RichText
doc = Document("MyNotes.one")
for table in doc.GetChildNodes(Table):
for row in table.GetChildNodes(TableRow):
for cell in row.GetChildNodes(TableCell):
cell_text = " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
print(cell_text, end="\t")
print()Hvilke Python‑versjoner støttes?
Python 3.10, 3.11 og 3.12.
Er biblioteket trådsikkert?
Hver Document-instans bør brukes fra en enkelt tråd. For parallell uttrekk, opprett en separat Document per tråd.
Relaterte ressurser: