使用Python处理Markdown front matter

什么是 Front matter

在你使用Hexo等基于Markdown的静态博客生成系统时,工具为你所生成的 md 文件开头通常会有一个符合YAML语法的代码段

比如我现在正在写的这篇文章,它的开头是这样的:

1
2
3
4
5
6
7
---
title: 使用Python处理Markdown front matter
toc: true
date: 2022-05-21 20:38:07
tags:
- Python
---

这就是 Front matter,它可以为 Markdown 文件提供一些基本的信息

为什么要搞这个

今天更换了一下博客的主题,新的主题如果要显示文章目录的话,需要在Front Matter中加入toc: true

以后的文章我可以通过修改scaffolds来解决,以前的文章要怎么搞呢?

所幸我在一番搜索后找到了一个不错的选项,找到了python-frontmatter ,这个包的用法十分简单,一两分钟就可以上手

根据我的情况,我写了一个小 demo,这样就可以为所有之前的文章添加一个toc字段了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import frontmatter  
import os

HEXO_POSTS_DIR = "path-to-_posts"


def getFilesFromPath(path):
files = []
for file in os.listdir(path):
filename = os.path.join(path, file)
files.append(filename)
# For those who are using Obsidian
files.remove(HEXO_POSTS_DIR + "\\.obsidian")
return files


def printTitle(markdownFiles):
for file in markdownFiles:
post = frontmatter.load(file)
print(post["title"])

def printnAllMetadata(files):
for file in files:
post = frontmatter.load(file)
print(post.metadata)

def addTocToFile(markdownFiles):
for file in markdownFiles:
post = frontmatter.load(file)
print(">>" + post["title"])
if "toc" in post:
print("Toc already existed")
else:
post["toc"] = True
with open(file,"wb") as f:
frontmatter.dump(post, f)
print("Toc added")

markdownFiles = getFilesFromPath(HEXO_POSTS_DIR)
addTocToFile(markdownFiles)
Author

BakaFT

Posted on

2022-05-21

Updated on

2023-12-28

Licensed under

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×