Витягнути текст з файлів 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)
Витягнути гіперпосилання
Гіперпосилання зберігаються в окремих 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 | Ні |
| Зашифровані документи | Ні |