如何在 Python 中读取 OneNote 页面元数据

如何在 Python 中读取 OneNote 页面元数据

OneNote .one 文件存储元数据,您可以在不解析完整文档 DOM 的情况下读取。 在 document 级别,Document.FileFormat 告诉您文件使用的是哪种 OneNote 变体。 在 page 级别,每个 Page 包含作者、创建时间戳、最后修改时间戳和层级。 Aspose.Note FOSS for Python 通过 DocumentPage 类公开这些信息。


先决条件

pip install aspose-note

文档级元数据

Document 对象公开一个元数据属性:

属性类型描述
doc.FileFormatFileFormatOneNote 变体:FileFormat.OneNote2010FileFormat.OneNoteOnlineFileFormat.Unknown
from aspose.note import Document

doc = Document("MyNotes.one")
print(f"File format: {doc.FileFormat}")

页面级元数据

每个 Page 对象包含:

PropertyTypeDescription
page.Authorstr | None创建或拥有该页面的用户的显示名称。
page.CreationTimedatetime | None页面创建时间。返回 UTC 时区的 Python datetime 对象。
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: 二级子页面(两个缩进)

备注

  • 所有时间戳(CreationTimeLastModifiedTime)在存在时都是 UTC 的 datetime 对象。
  • page.Level 对于在二进制格式中未存储级别的页面返回 None。使用 page.Level or 0None 视为 0

另请参阅

 中文