Jak získat text z souborů OneNote v jazyce Python
Microsoft OneNote .one soubory jsou binární dokumenty, které nelze číst jako prostý text nebo analyzovat pomocí obecných nástrojů XML. Aspose.Note FOSS pro Python poskytuje čistě pythonový parser, který načte .one soubory do objektového modelu (DOM) celého dokumentu, což usnadňuje programově extrahovat text, formátovat metadata a hypertextové odkazy.
Výhody použití Aspose.Note FOSS pro Python
- Nevyžaduje se Microsoft Office:číst:
.onesoubory na jakékoli platformě, včetně Linuxových CI/CD serverů - Přístup k úplnému textu a formátování: prostý text, tlustá/kurzí/podtržená verze, vlastnosti písma a hypertextové odkazy URL
- Volný a open-source: licence MIT, žádné poplatky za používání ani API klíče
Krok za krokem
Krok 1: Nainstalujte Aspose.Note FOSS pro Python
Instalace knihovny z PyPI. Jádro nemá žádné povinné závislosti:
pip install aspose-noteOvěřte instalaci:
from aspose.note import Document
print("Installation OK")Krok 2: Nahrát soubor .one
Vytvořit Document instance přenášením cesty souboru:
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Section: {doc.DisplayName}")
print(f"Pages: {len(list(doc))}")Na načtení z binárního proudu (např. ze cloudového úložiště nebo HTTP odpovědi):
from aspose.note import Document
with open("MyNotes.one", "rb") as f:
doc = Document(f)Krok 3: Vytáhnout všechny prosté texty
Použití: GetChildNodes(RichText) pro sběr všech RichText V tomto případě se provádí rekurzivní hluboký vyhledávání všech stránek, obrysů a prvků obvodu:
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)Pro ukládání vyčerpaného textu do souboru:
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")Krok 4: Zkontrolujte formátované běhy
Každá. RichText uzel obsahuje: TextRuns seznam: TextRun Každá jízda má nezávislou, zcela samostatnou funkci. TextStyle s formátováním na znak:
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}")Krok 5: Vytáhnout hypertextové odkazy
Hypertextové odkazy jsou uložené na jednotlivých stránkách. TextRun Zkontrolujte. Style.IsHyperlink a číst. 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}")Krok 6: Vytáhnout text na stránku
Pro získání textu uspořádaného podle názvu stránky:
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)Obvyklé problémy a řešení
1. ImportError: No module named ‘aspose’
Příčina:: Balíček není nainstalován v aktivním prostředí Pythonu.
Opravy:
pip install aspose-note
##Confirm active environment:
pip show aspose-note2. FileNotFoundError when loading .one file
Příčina:: Cesta souboru je nesprávná nebo soubor neexistuje.
Opravy: Před načtením použijte absolutní cestu nebo ověřte, zda soubor existuje:
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 on Windows when printing
Příčina:: Terminály Windows mohou používat starší kódování, které nemůže vykreslovat znaky Unicode.
Opravy:Rekonfigurujte stdout na začátku scénáře:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")4. Empty text results
Příčina::Účetní dvůr: .one soubor může být prázdný, obsahovat pouze obrázky nebo tabulky (bez uzlů RichText) nebo je to soubory notebooku (.onetoc2) spíše než soubor sekcí (.one).
Opravy: Zkontrolujte počet stránek a zkontrolujte typy uzlů:
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
Příčina::Účetní dvůr: .one Zde je kódovaný soubor. Zašifrované dokumenty nejsou podporovány.
Opravy:FOSS pro Python nepodporuje šifrování. .one Plně funkční komerční produkt Aspose.Note podporuje dešifrování.
Časté otázky
Můžu vytáhnout text ze všech stránek najednou?
- Ano, jsem.
doc.GetChildNodes(RichText)rekurzivně vyhledává celý strom dokumentu, včetně všech stránek, obrysů a prvků obvodu.
Podporuje knihovna soubory notebooku .onetoc2?
Ne, v knihovně to zvládnu. .one pouze soubory pro sekci. Soubori pro obsah notebooku (.onetoc2) jsou odlišný formát a nejsou podporovány.
Můžu vytáhnout text z tabulky?
- Ano, jsem.
TableCelluzly obsahují:RichTextděti, které lze číst stejným způsobem:
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()Jaké verze Pythonu jsou podporovány?
Python 3.10, 3.11 a 3.12.
Je knihovna bezpečná?
Každá. Document Pro paralelní extrakci vytvořte samostatný příklad. Document na vlákno.
Související zdroje: