使用yaml frontmatter解析和管理帖子
python-frontmatter的Python项目详细描述
[jekyll](http://jekyllrb.com/)-styleyaml front matter提供了一种有用的方法,可以向文本文档添加任意的结构化元数据,而不必考虑类型。
这是一个小软件包,用于加载和解析带有yaml前端内容的文件(或只是文本)。
安装:
pip install python-frontmatter
用法:
>>> import frontmatter
从文件名加载文章:
>>> post = frontmatter.load('tests/hello-world.markdown')
或文件(或类似文件的对象):
>>> with open('tests/hello-world.markdown') as f: ... post = frontmatter.load(f)
或从文本加载:
>>> with open('tests/hello-world.markdown') as f: ... post = frontmatter.loads(f.read())
访问内容:
>>> print(post.content) Well, hello there, world.# this works, too >>> print(post) Well, hello there, world.
使用元数据(元数据作为后置密钥代理):
元数据是一个字典,有一些方便的代理:>>> print(post['title']) Hello, world!
>>> sorted(post.keys()) ['layout', 'title']>>> from pprint import pprint >>> post['excerpt'] = 'tl;dr' >>> pprint(post.metadata) {'excerpt': 'tl;dr', 'layout': 'post', 'title': 'Hello, world!'}
如果不需要整个post对象,只需解析:
>>> with open('tests/hello-world.markdown') as f: ... metadata, content = frontmatter.parse(f.read()) >>> print(metadata['title']) Hello, world!
也写回纯文本:
>>> print(frontmatter.dumps(post)) # doctest: +NORMALIZE_WHITESPACE --- excerpt: tl;dr layout: post title: Hello, world! --- Well, hello there, world.
或写入文件(或类似文件的对象):
>>> from io import BytesIO >>> f = BytesIO() >>> frontmatter.dump(post, f) >>> print(f.getvalue().decode('utf-8')) # doctest: +NORMALIZE_WHITESPACE --- excerpt: tl;dr layout: post title: Hello, world! --- Well, hello there, world.