How to Read Page Metadata from OneNote in Python
OneNote .one files store metadata you can read without parsing the full document DOM. At the document level, Document.FileFormat tells you which OneNote variant the file uses. At the page level, each Page carries the author, creation timestamp, last-modified timestamp, and hierarchy level. Aspose.Note FOSS for Python exposes these through the Document and Page classes.
Prerequisites
pip install aspose-noteDocument-Level Metadata
The Document object exposes one metadata property:
| Property | Type | Description |
|---|---|---|
doc.FileFormat | FileFormat | The OneNote variant: FileFormat.OneNote2010, FileFormat.OneNoteOnline, or FileFormat.Unknown. |
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"File format: {doc.FileFormat}")Page-Level Metadata
Each Page object carries:
| Property | Type | Description |
|---|---|---|
page.Author | str | None | The display name of the user who created or owns the page. |
page.CreationTime | datetime | None | When the page was created. Returns a Python datetime object in UTC. |
page.LastModifiedTime | datetime | None | When the page was last modified. |
page.Level | int | None | Sub-page indent level. 0 = top-level page, 1 = first-level sub-page, 2 = second-level, etc. |
Step 1: Read Metadata for Every Page
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}")Complete Example: Metadata Report
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")Detecting Sub-Pages
In OneNote, sub-pages are visually indented under their parent page. The page.Level property reflects this nesting:
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)'}")Level values:
0: top-level page1: first-level sub-page (one indent)2: second-level sub-page (two indents)
Notes
- All timestamps (
CreationTime,LastModifiedTime) aredatetimeobjects in UTC when present. page.LevelreturnsNonefor pages where the level was not stored in the binary format. TreatNoneas0usingpage.Level or 0.