Sådan udtrækker du tekst fra OneNote‑filer i Python
Microsoft OneNote .one filer er binære dokumenter, der ikke kan læses som almindelig tekst eller parses med generiske XML‑værktøjer. Aspose.Note FOSS for Python leverer en ren‑Python‑parser, der indlæser .one filer i en fuld dokumentobjektmodel (DOM), hvilket gør det enkelt at udtrække tekst, formateringsmetadata og hyperlinks programmatisk.
Fordele ved at bruge Aspose.Note FOSS til Python
- Ingen Microsoft Office påkrævet: læs
.one‑filer på enhver platform, inklusive Linux CI/CD‑servere - Fuld tekst‑ og formateringsadgang: ren tekst, fed/kurvet/understreget løb, skriftegenskaber og hyperlink‑URL’er
- Gratis og open‑source: MIT‑licens, ingen brugsgebyrer eller API‑nøgler
Trin-for-trin guide
Trin 1: Installer Aspose.Note FOSS for Python
Installer biblioteket fra PyPI. Kernepakken har ingen obligatoriske afhængigheder:
pip install aspose-noteBekræft installationen:
from aspose.note import Document
print("Installation OK")Trin 2: Indlæs .one-filen
Opret en Document‑instans ved at videregive filstien:
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Section: {doc.DisplayName}")
print(f"Pages: {len(list(doc))}")For at indlæse fra en binær strøm (f.eks. fra cloud‑lagring eller et HTTP‑svar):
from aspose.note import Document
with open("MyNotes.one", "rb") as f:
doc = Document(f)Trin 3: Udtræk al ren tekst
Brug GetChildNodes(RichText) til at indsamle hver RichText node i dokumenttræet. Dette udfører en rekursiv dybde‑først søgning på tværs af alle sider, oversigter og oversigtselementer:
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 at gemme al tekst i 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")Trin 4: Inspicer formaterede løb
Hver RichText node indeholder en TextRuns liste over TextRun segmenter. Hver tekstkørsel bærer en uafhængig 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}")Trin 5: Udtræk hyperlinks
Hyperlinks gemmes på individuelle TextRun-noder. Tjek Style.IsHyperlink og læs 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}")Trin 6: Udtræk tekst pr. side
For at udtrække tekst organiseret efter sidetitel:
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)Almindelige problemer og løsninger
1. ImportError: Ingen modul med navnet ‘aspose’
Årsag: Pakken er ikke installeret i det aktive Python-miljø.
Rettelse:
pip install aspose-note
##Confirm active environment:
pip show aspose-note2. FileNotFoundError ved indlæsning af .one-fil
Årsag: Filstien er forkert, eller filen findes ikke.
Fix: Brug en absolut sti eller bekræft, at filen findes, før den indlæses:
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 udskrivning
Årsag: Windows-terminaler kan bruge en ældre kodning, der ikke kan gengive Unicode-tegn.
Fix: Omkonfigurer stdout i starten af dit script:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")4. Resultater af tom tekst
Årsag: Filen .one kan være tom, kun indeholde billeder eller tabeller (ingen RichText‑noder), eller være en notesbogfil (.onetoc2) i stedet for en sektionfil (.one).
Fix: Tjek sideantallet og inspicer nodetyper:
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
Årsag: Filen .one er krypteret. Krypterede dokumenter understøttes ikke.
Fix: Aspose.Note FOSS for Python understøtter ikke krypterede .one‑filer. Det fuldt udstyrede kommercielle Aspose.Note‑produkt understøtter dekryptering.
Ofte stillede spørgsmål
Kan jeg udtrække tekst fra alle sider på én gang?
Ja. doc.GetChildNodes(RichText) søger i hele dokumenttræet rekursivt, inklusive alle sider, oversigter og oversigtselementer.
Understøtter biblioteket .onetoc2-notebook-filer?
Nej. Biblioteket håndterer kun .one sektionfiler. Notebook‑indholdsfortegnelsesfiler (.onetoc2) er et andet format og understøttes ikke.
Kan jeg udtrække tekst fra tabeller?
Ja. TableCell noder indeholder RichText børn, der kan læses på samme måde:
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-versioner understøttes?
Python 3.10, 3.11 og 3.12.
Er biblioteket trådsikkert?
Hver Document-instans bør bruges fra en enkelt tråd. For parallel ekstraktion, opret en separat Document pr. tråd.
Relaterede ressourcer: