我正在尝试编写一个python函数,可以将csv更改为yaml。现在,我的csv看起来如下所示
name,description,tests
product_id,ID of the product,not null|unique
product_name,Name of the product,not null
我希望输出为
- name : product_id
description: ID of the product
tests:
- not null
- unique
- name: product_name
description: Name of the product
tests:
- not null
现在我只有这个了
for row_index, row in enumerate(datareader):
if row_index == 0:
# let's do this once here
data_headings = list()
for heading_index, heading in enumerate(row):
fixed_heading = heading.lower().replace(" ", "_").replace("-", "")
data_headings.append(fixed_heading)
if fixed_heading == "type":
type_index = heading_index
elif fixed_heading == "childfields":
child_fields_index = heading_index
else:
content = dict()
is_array = False
for cell_index, cell in enumerate(row):
content[data_headings[cell_index]] = cell
is_array = (cell_index == type_index) and (cell == "array")
result.append(content)`
2条答案
按热度按时间70gysomp1#
Python的标准库有一个处理CSV文件的模块。它的
DictReader
类假设输入文件的第一行是列名(除非你提供fieldnames参数)。使用它,你只需要对字段名'tests'做一些特殊的事情。不幸的是,它还不能处理pathlib.Path()
示例,所以你必须自己打开文件。您应该使用
ruamel.yaml
转储生成的数据结构,您必须将其安装在virtualenv中,例如使用python -m pip install ruamel.yaml
。它是YAML 1.2(免责声明:我是那个软件包的作者)。其给出:
cbeh67ev2#
在我看来,一个更像Python的解决方案是:
输入:
输出: