使用Python解析Markdown文件的frontmatter

Thu 22 June 2017

Python, TOML, YAML

当前这个博客是使用Markdown编写,以Hugo来生成静态的网站。Markdown文件多了之后,管理起来就很麻烦,需要脚本化的工具来帮忙。因为Hugo是根据Markdown文件中的frontmatter来对配置生成的网页,所以这个脚本化的工具必须支持frontmatter。选来选去,还是编写python脚本来管理比较便捷。

首先用pip安装*python-frontmatter*,顺便把其他要用到的包也装上(注意,我使用的Python3,所以用的是pip3):

pip3 install python-frontmatter
pip3 install toml
pip3 install dateutils

Hugo支持两种格式的frontmatter:YAML和TOML。YAML是比较常见的,但是TOML也很流行(据说TOML比YAML来得简洁高效),为了让*python-frontmatter*支持TOML,需要同时安装*toml*包。

下面是一个脚本例子,遍历当前目录下的markdown文件(以md结尾),并提取出markdown文件中的frontmatter,打印出其中的日期:

#!/usr/bin/env python3

import glob
import shutil
import dateutil.parser
import frontmatter

def main():
    files = glob.glob('*.md')
    if files:
        files.remove('_index.md')
    for f in files:
        date = getDate(f).isoformat()
        print(date)

def getDate(md_file):
    with open(md_file) as f:
        md = frontmatter.load(f)
        dt = md.metadata['date']
        if type(dt) == str:
            # toml 格式下date被识别为字符串
            return dateutil.parser.parse(dt).date()
        else:
            # yaml 格式下date被识别为datetime,直接返回
            return dt.date()

if __name__ == '__main__':
    main()

把上面的脚本保持成getdate.py,然后执行python3 getdate.py,在我的电脑上显示下面的结果:

2016-12-28
2017-01-15
2017-04-15
2017-04-20
2017-04-23
...

(完)

Load Disqus Comments