我似乎无法解释如何用Python解析'Front Matter'.我有以下内容:
---
name: David
password: dwewwsadas
email: david@domain.com
websiteName: Website Name
websitePrefix: websiteprefix
websiteDomain: domain.com
action: create
---
Run Code Online (Sandbox Code Playgroud)
我正在使用以下代码:
listing = os.listdir(path)
for infile in listing:
stream = open(os.path.join(path, infile), 'r')
docs = yaml.load_all(stream)
for doc in docs:
for k,v in doc.items():
print k, "->", v
print "\n",
Run Code Online (Sandbox Code Playgroud)
由于第二组,我不断收到错误 ---
我知道这是一个老问题,但我只是遇到了同样的问题并且使用了python-frontmatter.以下是向Front事件添加新变量的示例:
import frontmatter
import io
from os.path import basename, splitext
import glob
# Where are the files to modify
path = "en/*.markdown"
# Loop through all files
for fname in glob.glob(path):
with io.open(fname, 'r') as f:
# Parse file's front matter
post = frontmatter.load(f)
if post.get('author') == None:
post['author'] = "alex"
# Save the modified file
newfile = io.open(fname, 'w', encoding='utf8')
frontmatter.dump(post, newfile)
newfile.close()
Run Code Online (Sandbox Code Playgroud)
启动---新文档,这会导致您的第二个文档为空,并且doc用于None第二部分。您遍历了键、值对,就doc好像 everydoc是 Pythondict或等效类型一样,但事实None并非如此,因此您应该在循环内测试它(当然有多种方法可以做到这一点,以及如果doc不是一个dict):
....
for doc in yaml.load_all(stream):
if hasattr(doc, 'items'):
for k, v in doc.items():
print k, "->", v
else:
print doc
Run Code Online (Sandbox Code Playgroud)