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

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

OneNote .one файлы хранят метаданные, которые можно прочитать без разбора полного DOM документа. На уровне документа Document.FileFormat сообщает, какой вариант OneNote используется в файле. На уровне страницы каждый Page содержит автора, метку времени создания, метку времени последнего изменения и уровень иерархии. Aspose.Note FOSS for 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.Authorstr | NoneОтображаемое имя пользователя, создавшего страницу или являющегося её владельцем.
page.CreationTimedatetime | NoneДата и время создания страницы. Возвращает объект Python datetime в UTC.
page.LastModifiedTimedatetime | NoneДата и время последнего изменения страницы.
page.Levelint | NoneУровень отступа подстраницы. 0 = страница верхнего уровня, 1 = подстраница первого уровня, 2 = второго уровня и т.д.

Шаг 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.

См. также

 Русский