仅使用内置功能,使用正确数据类型的YAML到Python字典

2024-05-13 21:20:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个变量,它包含4行YAML键/值,在标记文件中用作frontmatter

我需要将其放入字典中,但当我这样做时,我希望date:值成为datetime对象,而tags:值成为列表

我不知道该怎么做。我可以将键/值放入字典,但我不确定如何在创建字典之前或期间将“date:tags:转换为正确的类型

这就是我目前在没有正确类型的情况下进行操作的方式:

>>> import re
>>> frontmatter = """
... id: 20201222163206
... title: Lorem Ipsum Dolor Sit Amet
... date: 2020-12-22 16:32:06
... tags: [lorem, ipsum, dolor, sit, amet]
... """
>>> frontmatter_dict = dict(re.findall(r"(.*): (.*)", frontmatter))
>>> print(frontmatter_dict)
{'id': '20201222163206', 'title': 'Lorem Ipsum Dolor Sit Amet', 'date': '2020-12-22 16:32:06', 'tags': '[lorem, ipsum, dolor, sit, amet]'}

这就是我希望字典的结构类似(正确的类型,如上所述):

{'id': 20201222163206, 'title': 'Lorem Ipsum Dolor Sit Amet', 'date': datetime.datetime(2020, 12, 22, 16, 32, 6), 'tags': ['lorem', 'ipsum', 'dolor', 'sit', 'amet']}

在上面的例子中,我可以使用PyYAML模块来实现它,但重要的是我只使用内置Python模块来实现这个,因此在这种情况下使用PyYAML不是一个解决方案

我已经浏览了PyYAML的source code,看看我是否能够找到如何实现它的方法,但是遗憾的是,我的Python技能还不足以解决这个问题

如前所述,这是我使用PyYAML实现它的方式,但我只需要使用内置模块

>>> import yaml
>>> frontmatter = """
... id: 20201222163206
... title: Lorem Ipsum Dolor Sit Amet
... date: 2020-12-22 16:32:06
... tags: [lorem, ipsum, dolor, sit, amet]
... """
>>> frontmatter_dict = yaml.load(frontmatter, Loader=yaml.FullLoader)
>>> print(frontmatter_dict)
{'id': 20201222163206, 'title': 'Lorem Ipsum Dolor Sit Amet', 'date': datetime.datetime(2020, 12, 22, 16, 32, 6), 'tags': ['lorem', 'ipsum', 'dolor', 'sit', 'amet']}

Tags: iddatetimedatetitletagsfrontmatteripsumlorem
1条回答
网友
1楼 · 发布于 2024-05-13 21:20:03

构建词典之后

import datetime


frontmatter_dict['date'] = datetime.datetime.strptime(frontmatter_dict['date'], '%Y-%m-%d %H:%M:%S')

为了标签

frontmatter_dict['tag'] = frontmatter_dict['tag'][1:-1].split(',')

相关问题 更多 >