Как считать метаданные страницы из OneNote на Python
OneNote .one файлы хранят метаданные, которые можно прочитать без разбора полного DOM документа. На уровне документа Document.FileFormat сообщает, какой вариант OneNote используется в файле. На уровне страницы каждый Page содержит автора, метку времени создания, метку времени последнего изменения и уровень иерархии. Aspose.Note FOSS for Python предоставляет доступ к этим данным через классы Document и Page.
Требования
pip install aspose-noteМетаданные уровня документа
Объект Document раскрывает одно свойство метаданных:
| Свойство | Тип | Описание |
|---|---|---|
doc.FileFormat | FileFormat | Вариант 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 | str | None | Отображаемое имя пользователя, создавшего страницу или являющегося её владельцем. |
page.CreationTime | datetime | None | Дата и время создания страницы. Возвращает объект Python datetime в UTC. |
page.LastModifiedTime | datetime | None | Дата и время последнего изменения страницы. |
page.Level | int | 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.