【发布时间】:2021-06-03 04:21:24
【问题描述】:
我正在使用 ruamel.yaml 从 Python 字典创建 YAML 文件。在字典中,有一个列表作为“类型”键的值。我整天都在寻找解决问题的示例,但在文档中找不到任何内容。
我一直在尝试获得这样的 YAML 文件输出:
some_key:
- id: 1059
parameter: Paramter1
unit: kg
type: [A, B, C, 1, 2, 3]
这意味着类型后面的列表是块样式中的流样式元素,这就是我切换到ruamel.yaml 的实际原因,因为我读到它可能与 PyYAML (Mixing block and flow formatting in YAML with Python) 不同。但在那里我找不到我想要做的事情。
当我打电话时我(不出所料地)得到什么
yaml.dump()
字典上是
some_key:
- id: 1059
parameter: Paramter1
unit: kg
type:
- A
- B
- C
- '1'
- '2'
- '3'
有人知道这是如何解决的吗?一个有用的信息可能是也可能不是,相关的列表也可以转换为不同的格式(例如字符串),我从 csv-sheet 中得到它。
更新,这是我一直在尝试的代码示例:
CSV 行如下所示:
"","",Parameter 1,Dropdown,kg,"","","A,B,C,1,2,3"
在conversion.py中类似:
with open(csv_filename, "r") as file:
reader = csv.reader(file)
data = {"some_key": []}
for position, line in enumerate(reader):
if line[3] == "Dropdown":
select_options = []
for item in line[7].split(","):
select_options.append(item)
select_options = [x.strip(" ") for x in select_options]
type = f"{select_options}"
dict = {
"id": "tbd",
"parameter": line[2].strip(" "),
"unit": line[4].strip(" "),
"type": type,
}
data["some_key"].append(dict)
doc = yaml.dump(data, file)
【问题讨论】:
-
最好包含一个最小的程序和最小的 CSV 输入,以显示您如何获得输出。这样我们就可以为您提供更直接适用于您的情况的答案。
-
你是对的。我将它添加到我的原始帖子中,以便可能遇到类似问题的人看到我尝试过的内容
-
您可以做的一件事是在
section_options中获取数字,因为数字是在附加之前到try:\n item=int(item)\n except ValueError:\n pass。 (将 \n 变成真正的换行符并正确缩进)。 -
这就是我在您的回复后在我的代码中实际所做的(\n 除外)。感谢您的帮助!
标签: python yaml ruamel.yaml