【问题标题】:How to convert a YAML to CSV in python如何在 python 中将 YAML 转换为 CSV
【发布时间】:2021-08-13 05:50:46
【问题描述】:

我的 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)

我卡在这里了。

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

【问题讨论】:

    标签: python csv ansible yaml


    【解决方案1】:

    您可以使用字典在 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

    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
    

    【讨论】:

      猜你喜欢
      • 2018-03-22
      • 2021-06-14
      • 1970-01-01
      • 2021-07-21
      • 2015-01-09
      • 2020-12-19
      • 2016-11-05
      • 2019-05-28
      • 1970-01-01
      相关资源
      最近更新 更多