Как читать метаданные страниц из OneNote в Python
OneNote .one файлы хранят метаданные, которые можно прочитать без разбора полного DOM‑документа. На документ уровне, Document.FileFormat сообщает, какой вариант OneNote использует файл. На странице уровне, каждый Page содержит автора, метку времени создания, метку времени последнего изменения и уровень иерархии. Aspose.Note FOSS для 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` |
page.LastModifiedTime | `datetime | None` |
page.Level | `int | None` |
Шаг 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.