Извличане на текст от файлове на OneNote с помощта на Python
Ако трябва да четете текст от Microsoft OneNote .one файлове в Python скрипт, без да инсталирате Microsoft Office или да стартирате Windows, Aspose.Note FOSS for Python е решението. Това е 100% безплатна, с отворен код библиотека, която директно парсира бинарния формат на OneNote и предоставя чист Python API.
Инсталиране
pip install aspose-note
Няма API ключ. Няма файл с лиценз. Няма Microsoft Office.
Най‑опростеният подход: GetChildNodes(RichText)
Текстът в OneNote се съхранява в RichText възли, разпределени в страници, контури и елементи на контурите. GetChildNodes(RichText) извършва рекурсивно търсене в цялото дърво на документа и връща всеки текстов възел като плосък списък:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
if rt.Text:
print(rt.Text)
Това е най-бързият начин да извлечете цялото текстово съдържание от .one файл.
Записване на текста във файл
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")
Извличане на текст по страници
Когато трябва да знаете от коя страница произхожда всеки текстов блок:
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)
Извличане на хипервръзки
Hyperlinks се съхраняват на индивидуални TextRun обекти в RichText възли. Проверете 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}")
Откриване на форматиране: удебелено, курсив, подчертаване
Всеки TextRun пренася форматиране за всеки символ през неговия 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}")
Четене от поток
Работи с облачно съхранение, HTTP отговори в тялото или буфери в паметта:
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
В Windows терминали, sys.stdout може да използва наследено кодиране, което се срива при Unicode символи. Добавете това в началото на вашия скрипт:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
Какво поддържа библиотеката
| Функция | Поддържано |
|---|---|
Четене .one файлове (път или поток) | Да |
Извличане RichText.Text (обикновен текст) | Да |
Преглед TextRun.Style (удебелен, курсив, хипервръзка, шрифт) | Да |
| Извличане на текст от клетки в таблица | Да |
| Четене на заглавия на страници | Да |
Записване обратно в .one | Не |
| Криптирани документи | Не |