Извличане на текст от 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.TextRuns:
        if run.Style.IsHyperlink and run.Style.HyperlinkAddress:
            print(f"{run.Text!r}  ->  {run.Style.HyperlinkAddress}")

Форматиране на детективите: Bold, Italic, Underline

Всеки от тях TextRun Използва се за форматиране на характера чрез неговия TextStyle:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        s = run.Style
        if any([s.IsBold, s.IsItalic, s.IsUnderline]):
            flags = ", ".join(f for f, v in [
                ("bold", s.IsBold), ("italic", s.IsItalic), ("underline", s.IsUnderline)
            ] 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Не
Криптирани документиНе

Следващите стъпки