Wyodrębnij tekst z plików OneNote przy użyciu Python
Jeżeli potrzebujesz odczytać tekst z Microsoft OneNote .one pliki w skrypcie Python, bez instalowania Microsoft Office ani uruchamiania systemu Windows, Aspose.Note FOSS for Python jest rozwiązaniem. To w 100% darmowa, otwarto‑źródłowa biblioteka, która bezpośrednio parsuje binarny format OneNote i udostępnia czyste API Python.
Instalacja
pip install aspose-note
Brak klucza API. Brak pliku licencji. Brak Microsoft Office.
Najprostsze podejście: GetChildNodes(RichText)
Tekst OneNote jest przechowywany w RichText węzłach rozmieszczonych na stronach, zarysach i elementach zarysów. GetChildNodes(RichText) wykonuje rekurencyjne przeszukiwanie całego drzewa dokumentu i zwraca każdy węzeł tekstowy jako płaską listę:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
if rt.Text:
print(rt.Text)
To najszybszy sposób, aby uzyskać całą treść tekstową z .one pliku.
Zapisz tekst do pliku
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")
Wyodrębnij tekst po stronach
Gdy potrzebujesz wiedzieć, z której strony pochodzi każdy blok tekstu:
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)
Wyodrębnij hiperłącza
Odnośniki hipertekstowe są przechowywane na poszczególnych TextRun obiektach w RichText węzłach. Sprawdź 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}")
Wykryj formatowanie: pogrubienie, kursywa, podkreślenie
Każdy TextRun przenosi formatowanie znak po znaku przez jego 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}")
Odczyt z strumienia
Działa z przechowywaniem w chmurze, ciałami odpowiedzi HTTP lub buforami w pamięci:
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)")
Poprawka kodowania w systemie Windows
W terminalach Windows, sys.stdout może używać starszego kodowania, które powoduje awarię przy znakach Unicode. Dodaj to na początku swojego skryptu:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
Co biblioteka obsługuje
| Funkcja | Obsługiwane |
|---|---|
Odczyt .one pliki (ścieżka lub strumień) | Tak |
Rozpakuj RichText.Text (czysty tekst) | Tak |
Sprawdź TextRun.Style (pogrubienie, kursywa, hiperłącze, czcionka) | Tak |
| Wyodrębnij tekst z komórek tabeli | Tak |
| Odczytaj tytuły stron | Tak |
Zapisz z powrotem do .one | Nie |
| Zaszyfrowane dokumenty | Nie |