Как читать метаданные страниц из OneNote в Python

Как читать метаданные страниц из OneNote в Python

OneNote .one файлы хранят метаданные, которые можно прочитать без разбора полного DOM‑документа. На документ уровне, Document.FileFormat сообщает, какой вариант OneNote использует файл. На странице уровне, каждый Page содержит автора, метку времени создания, метку времени последнего изменения и уровень иерархии. Aspose.Note FOSS для Python раскрывает их через Document и Page классы.


Требования

pip install aspose-note

Метаданные уровня документа

Эта Document Объект предоставляет одно свойство метаданных:

СвойствоТипОписание
doc.FileFormatFileFormatВариант OneNote: FileFormat.OneNote2010, FileFormat.OneNoteOnline, или FileFormat.Unknown.
from aspose.note import Document

doc = Document("MyNotes.one")
print(f"File format: {doc.FileFormat}")

Метаданные уровня страницы

Каждый Page объект содержит:

СвойствоТипОписание
page.Author`strNone`
page.CreationTime`datetimeNone`
page.LastModifiedTime`datetimeNone`
page.Level`intNone`

Шаг 1: Чтение метаданных для каждой страницы

from aspose.note import Document, Page

doc = Document("ProjectNotes.one")

for i, page in enumerate(doc, start=1):
    title = ""
    if page.Title and page.Title.TitleText:
        title = page.Title.TitleText.Text.strip()

    level = page.Level or 0
    indent = "  " * level

    author = page.Author or "(unknown)"
    created = page.CreationTime.strftime("%Y-%m-%d") if page.CreationTime else "(none)"
    modified = page.LastModifiedTime.strftime("%Y-%m-%d %H:%M") if page.LastModifiedTime else "(none)"

    print(f"{indent}[{i}] {title or '(untitled)'}")
    print(f"{indent}    Author:   {author}")
    print(f"{indent}    Created:  {created}")
    print(f"{indent}    Modified: {modified}")
    print(f"{indent}    Level:    {level}")

Полный пример: Отчет о метаданных

from aspose.note import Document

def print_metadata_report(one_path: str) -> None:
    doc = Document(one_path)

    print()

    for i, page in enumerate(doc, start=1):
        title = ""
        if page.Title and page.Title.TitleText:
            title = page.Title.TitleText.Text.strip()

        level = page.Level or 0
        prefix = "  " * level + f"[{i}]"

        parts = [prefix, f'"{title or "(untitled)"}"']
        if page.Author:
            parts.append(f"by {page.Author}")
        if page.CreationTime:
            parts.append(f"created {page.CreationTime.strftime('%Y-%m-%d')}")
        if page.LastModifiedTime:
            parts.append(f"modified {page.LastModifiedTime.strftime('%Y-%m-%d')}")

        print("  ".join(parts))

print_metadata_report("ProjectNotes.one")

Обнаружение подстраниц

В OneNote подстраницы визуально отступают под своей родительской страницей. Свойство page.Level отражает эту вложенность:

from aspose.note import Document

doc = Document("MyNotes.one")

for page in doc:
    level = page.Level or 0
    title = ""
    if page.Title and page.Title.TitleText:
        title = page.Title.TitleText.Text.strip()

    indent = "  " * level
    marker = "├─" if level > 0 else "•"
    print(f"{indent}{marker} {title or '(untitled)'}")

Значения уровня:

  • 0: страница верхнего уровня
  • 1: подстраница первого уровня (один отступ)
  • 2: подстраница второго уровня (два отступа)

Примечания

  • Все метки времени (CreationTime, LastModifiedTime) являются datetime объектами в UTC, если они присутствуют.
  • page.Level возвращает None для страниц, где уровень не был сохранён в бинарном формате. Обрабатывать None как 0 используя page.Level or 0.

См. также

 Русский