如何在 Python 中读取 OneNote 页面元数据
OneNote .one 文件存储元数据,您可以在不解析完整文档 DOM 的情况下读取。 在 document 级别,Document.FileFormat 告诉您文件使用的是哪种 OneNote 变体。 在 page 级别,每个 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 对象包含:
| Property | Type | Description |
|---|---|---|
page.Author | str | None | 创建或拥有该页面的用户的显示名称。 |
page.CreationTime | datetime | None | 页面创建时间。返回 UTC 时区的 Python datetime 对象。 |
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)在存在时都是 UTC 的datetime对象。 page.Level对于在二进制格式中未存储级别的页面返回None。使用page.Level or 0将None视为0。