繁体   English   中英

如何将这种格式的字典写入 csv?

[英]How can I write this format of a dictionary into a csv?

我正在努力将这种格式的字典写入 csv。 我能够正确填充所有 CSV 列,但是我无法使用正确的数据填充最后一列。

{
    'file.txt': 
        [
            'Bot2',
            {
                '0000022059191883 ': 'NOT_ONLINE',
                '0000008352872313 ': 'true : '
            }
        ]
}

我曾尝试使用此代码写入 CSV,正如前面提到的最后一列不正确。

for key in info_dict:
    for power_time_stamp in info_dict[key][1]:
        string = key + ',' + 
            info_dict[key][0] + ',' + 
            power_status + ',' + 
            power_time_stamp + ',' + 
            vertical_status + ',' + 
            vertical_time_stamp + '\n'
        f.write(string)

我知道我缺少一个用于将vertical_time_stamp写入 CSV 的循环,主要是因为我不确定如何正确构建循环。

编辑:

csv_columns = [
    'File_Name',
    'Bot_#',
    'Power Status',
    'Power_Time_Stamp',
    'Vertical_Status',
    'Vertical_Time_Stamp'
]

关于基于字典打印示例映射列:

Filename : file.txt
Bot # : Bot2
Power Status: NOT_ONLINE
Power Time Stamp : 0000022059191883
Vetical Status : true :
Vertical Time Stamp : 0000008352872313

尝试保留尽可能多的原始代码

for file_name, record in info_dict.items():
    bot_id = record[0]
    power_time_stamps, vertical_time_stamp = record[1].keys()

    power_status, vertical_status = record[1].values()


    string = file_name + ', '  + ', ' + power_status + ', ' + power_time_stamp + ', ' + vertical_status + ', ' + vertical_time_stamp + '\n'
    f.write(string)

为了更好的可读性和性能,我们可以使用join代替连接,字符串也不是最好的变量名:

   row = ", ".join([file_name, bot_id, power_status, power_time_stampt, vertical status, vertical_time_stamp])

请注意,只有最新版本的 python 才能保证字典中键的顺序,对于早期版本,您需要检查类型以区分垂直和功率数据。 您也可以使用 csv 模块写入 csv 文件(检查另一个答案)。

我从 Serge 的回答中获取并使用标准库csv模块发布了一个替代版本:

import csv

info_dict = { 'file.txt': [
    'Bot2', {
    '0000022059191883 ': 'NOT_ONLINE',
    '0000008352872313 ': 'true : '
    }
]}

headers = [
    'File Name',
    'Bot #',
    'Power Status',
    'Power Timestamp',
    'Vertical Status',
    'Vertical Timestamp'
]

with open('file.csv', 'w') as f:
    writer = csv.writer(f, csv.QUOTE_ALL)

    writer.writerow(headers)

    for fname in info_dict:
        bot_id, rec = info_dict[fname]

        timestamps = rec.keys()

        statuses = rec.values()

        writer.writerow([
            fname,
            bot_id,
            statuses[0],
            timestamps[0],
            statuses[1],
            timestamps[1]
        ])

虽然它没有经过测试。 我假设 Serge 的代码使用正确的值填充变量。

这里的目标是展示如何消除字符串连接以及如何使用csv模块。

暂无
暂无

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

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