【发布时间】:2020-01-27 09:11:26
【问题描述】:
我试图从.md 文件中检索前文,当我的前文的每个标题都在一行时,我可以检索内容。
例如:
---
title: "Meeting"
date: 2019-03-14T07:51:28+01:00
draft: false
status:["process", "todo"]
---
所以我写了下面的python脚本来获取前文内容
def get_front_matter(file, start='---', end='---'):
"""Strip file and retrieve front matter then format the value"""
content = {}
with open(file, 'r', encoding='UTF-8') as file_content:
for content_line in file_content:
if content_line.strip() == start:
break
for content_line in file_content:
if content_line.strip() == end:
break
line_data = content_line.split(':', 1)
# If we cannot split decently, carry on
if len(line_data) != 2:
continue
# format the string to store in dict for better usage
content[line_data[0]] = re.sub(r"[\n\t]*", "", line_data[1]).strip(' "')
return content
但是,如果我的前任 status 有多行,我会遇到问题。
---
title: "Meeting"
date: 2019-03-14T07:51:28+01:00
draft: false
status:
[
"process",
"todo",
"hold"
]
---
当我尝试阅读上述文件的前面事项时,我得到一个空白值到status,但它应该如下:
{'title': 'Meeting', 'date': '2019-03-14T07:51:28+01:00', 'draft': 'false', 'teams': '["process", "todo", "hold"]'}
有没有其他方法可以根据行或标签来读取前文的内容。我尝试了一些正则表达式,但我无法检索一组行。
【问题讨论】:
-
前面的内容通常采用一种通用格式,并且您的标题看起来很像 YAML。你确定需要手动解析吗?
-
我没有任何选择,因为 md 文件已经生成,我现在无法更改它们:(
-
我问的是header是否是 YAML,而不是你能不能改成它。
-
是的。我现在也在尝试其他解决方案elbauldelprogramador.com/en/…
-
如果是 yaml,您可以将虚线之间的位分开并将其提供给 pyyaml。
标签: python regex python-3.x