我有下面的csv文件格式,我需要转换成yaml。(或下面的示例输出)
CVS文件格式
CASSANDRA a a
DSE_OPSCENTER
IGNITE a
KAFKA_LEAD b
KAFKA_SMART
OAM
RBM a
我使用下面的代码将文件转换为预期的输出
^{pr2}$我得到的输出量低于输出值,这对我来说很好。在
CASSANDRA
a
a
DSE_OPSCENTER
IGNITE
a
KAFKA_LEAD
KAFKA_SMART
...
我需要一个小的帮助,在这里把卡桑德拉,DSE_OPSCENTER等等放在方括号内。像下面这样的东西
[CASSANDRA]
a
a
[DSE_OPSCENTER]
...
编辑
我添加了一个模板格式。但我不知道如何将价值观放在他们各自的群体中
HOST_VAR_TEMPLATE = """
[CASSANDRA]
{cell}
[DSE_OPSCENTER]
[SMART]
[SPARK]
[SPARK_MASTERS]
[ZK]
"""
csvfile = open('hosts.csv', 'r')
datareader = csv.reader(csvfile, delimiter=',', quotechar='"')
data_headings = []
for i in datareader:
print i[1:]
with open('hosts', "w") as f:
for cell in i:
print cell
f.write(
HOST_VAR_TEMPLATE.format(
cell=cell,
)
)
您正在创建一个文件,其中包含一个多行标量字符串,后跟一个显式的文档结束标记。 您尝试自己编写文件,而不是使用YAML库。原则上这是可能的,但有些情况下你必须特别小心。在
您应该首先使用YAML库加载最终结果:
这将给您一个
ComposerError
,告诉您a
(第一个)开始一个新文档。这是因为从[
开始,解析器假设文档由单个流样式序列组成,一旦遇到相应的]
,文档就完成了。在如果你想在YAML文件中有一个多行的字符串,最好使用块样式的文本标量。这是正确的
^{pr2}$如果您不想冒创建无效YAML文件的风险,请创建一个Python字符串变量
data
,并将每一行(包括新行)附加到它,然后使用YAML库将其写入文件:(
PreservedScalarString
类型将多行Python字符串包装成ruamel.yaml
转储为块样式的文本标量。在相关问题 更多 >
编程相关推荐