Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中将YAML转换为CSV_Python_Csv_Ansible_Yaml - Fatal编程技术网

如何在python中将YAML转换为CSV

如何在python中将YAML转换为CSV,python,csv,ansible,yaml,Python,Csv,Ansible,Yaml,我在log.yml文件中保存了一个字典列表,我想将其转换为csv,使其看起来像这样 Yaml\u to\u CSV.py import csv import yaml fieldnames = ['Name', 'IP', 'Comments', 'Subnet4', 'Subnet-Mask'] with open('output.csv', 'w', newline='') as f_output: csv_output = csv.DictWriter(f_output, f

我在log.yml文件中保存了一个字典列表,我想将其转换为csv,使其看起来像这样

Yaml\u to\u CSV.py

import csv
import yaml

fieldnames = ['Name', 'IP', 'Comments', 'Subnet4', 'Subnet-Mask']

with open('output.csv', 'w', newline='') as f_output:
    csv_output = csv.DictWriter(f_output, fieldnames=fieldnames)
    csv_output.writeheader()

    for filename in ['log.yml']:
        with open(filename) as f_input:
            data = yaml.safe_load(f_input)
我被困在这里了

log.yml

-   comments: FWP - Host 1
    ipv4-address: 10.1.2.3
    name: gTest101
-   comments: FWP - Network 2
    name: gTest102
    subnet-mask: 255.255.255.255
    subnet4: 41.1.2.2

您可以使用字典在YAML中的字段名和CSV文件中的字段名之间进行映射:

import csv
import yaml

fields = {
    'name' : 'Name',
    'ipv4-address' : 'IP',
    'comments' : 'Comments',
    'subnet4' : 'Subnet4',
    'subnet-mask' : 'Subnet-Mask',
}

with open('output.csv', 'w', newline='') as f_output:
    csv_output = csv.DictWriter(f_output, fieldnames=fields.values())
    csv_output.writeheader()

    for filename in ['log.yml']:
        with open(filename) as f_input:
            for row_yaml in yaml.safe_load(f_input):
                row_csv = {fields[key] : value for key, value in row_yaml.items()}
                csv_output.writerow(row_csv)
这将产生
output.csv
,如下所示:

名称、IP、注释、子网4、子网掩码
gTest101,10.1.2.3,FWP-主机1,,
gTest102,FWP-网络2,41.1.2.2255.255.255.255