Markdown Front Matter
从 Markdown 文件和字符串中提取 YAML Front Matter。
什么是Front Matter?¶
Front Matter是 Markdown 文件顶部用 --- 分隔符包裹的 YAML 块。常用于博客平台、静态网站生成器和内容管理系统。
post.md
---
title: 博客文章
author: Alice
date: 2024-01-15
tags: [yaml, python, rust]
---
# 你好世界
这是内容。
read_markdown()¶
从 Markdown 文件解析Front Matter:
从文件解析
import pyrs_yaml
# 返回 (frontmatter_dict, content_string)
frontmatter, content = pyrs_yaml.read_markdown("post.md")
print(frontmatter)
# {'title': '博客文章', 'author': 'Alice', 'date': '2024-01-15', 'tags': ['yaml', 'python', 'rust']}
print(content)
# "# 你好世界\n\n这是内容。\n"
read_markdown_str()¶
从 Markdown 字符串解析Front Matter:
从字符串解析
markdown_text = """
---
title: 我的文章
tags: [tech]
---
这里是内容。
"""
frontmatter, content = pyrs_yaml.read_markdown_str(markdown_text)
if frontmatter:
print(f"标题: {frontmatter['title']}")
print(f"标签: {frontmatter['tags']}")
print(f"内容: {content}")
else:
print("未找到Front Matter")
没有Front Matter的情况¶
如果文件/字符串没有Front Matter:
无 Front Matter
frontmatter, content = pyrs_yaml.read_markdown("no-frontmatter.md")
# frontmatter 为 None,content 为全文
assert frontmatter is None
assert content == "普通 Markdown 内容。"
常见使用场景¶
提取博客列表的元数据
# 提取博客列表的元数据
frontmatter, _ = pyrs_yaml.read_markdown("draft.md")
if frontmatter.get("published", False):
print(f"已发布文章: {frontmatter['title']}")
else:
print("草稿文章")
处理所有 Markdown 文件
# 处理所有 Markdown 文件
import glob
for path in glob.glob("posts/*.md"):
meta, content = pyrs_yaml.read_markdown(path)
# 使用元数据和内容渲染模板
验证 Front Matter 结构
# 验证Front Matter结构
required_fields = ["title", "author", "date"]
frontmatter, _ = pyrs_yaml.read_markdown("article.md")
for field in required_fields:
assert field in frontmatter, f"缺少必需字段: {field}"
另请参阅¶
- 解析 YAML — 解析纯 YAML 文档
- Markdown 头信息 API —
read_markdown()和read_markdown_str()