繁体   English   中英

如何在 python 中将 YAML 转换为 CSV

[英]How to convert a YAML to CSV in python

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

Yaml_to_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)

我被困在这里。

日志.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 文件中的字段名称之间使用 map 的字典:

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为:

Name,IP,Comments,Subnet4,Subnet-Mask
gTest101,10.1.2.3,FWP - Host 1,,
gTest102,,FWP - Network 2,41.1.2.2,255.255.255.255

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM