Python 如何将此格式的词典写入csv?

Python 如何将此格式的词典写入csv?,python,csv,dictionary,Python,Csv,Dictionary,我正在努力将这本字典以这种格式写入csv。我能够正确填充所有CSV列,但无法使用正确的数据填充最后一列 { “file.txt”: [ "Bot2",, { '0000022059191883':'NOT_ONLINE', '0000008352872313':'true:' } ] } 我曾尝试使用此代码写入CSV,如前所述,最后一列是不正确的 用于输入信息: 对于信息[key][1]中的电源时间戳: 字符串=键+','+ 信息目录[key][0]+','+ 电源状态+','+ 电源时间戳+

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

{
“file.txt”:
[
"Bot2",,
{
'0000022059191883':'NOT_ONLINE',
'0000008352872313':'true:'
}
]
}
我曾尝试使用此代码写入CSV,如前所述,最后一列是不正确的

用于输入信息:
对于信息[key][1]中的电源时间戳:
字符串=键+','+
信息目录[key][0]+','+
电源状态+','+
电源时间戳+','+
垂直_状态+','+
垂直时间戳+'\n'
f、 写入(字符串)
我知道我缺少了一个将
vertical\u time\u stamp
写入CSV的循环,主要是因为我不确定如何正确构造循环

编辑:

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

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
info_dict={'file.txt':[
"Bot2",{
'0000022059191883':'NOT_ONLINE',
'0000008352872313':'true:'
}
]}
标题=[
“文件名”,
“机器人”,
“电源状态”,
“电源时间戳”,
“垂直状态”,
“垂直时间戳”
]
将open('file.csv','w')作为f:
writer=csv.writer(f,csv.QUOTE_ALL)
writer.writerow(标题)
对于信息目录中的fname:
bot\u id,rec=info\u dict[fname]
时间戳=记录键()
状态=记录值()
writer.writerow([
fname,
机器人id,
状态[0],
时间戳[0],
状态[1],
时间戳[1]
])
不过,它没有经过测试。我假设Serge的代码用正确的值填充变量


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

您想要实现什么样的输出格式?请提供.csv_列=[“文件名”、“机器人名”、“电源状态”、“电源时间戳”、“垂直状态”、“垂直时间戳”]值是什么?请在您的帖子中,评论很难阅读,很容易错过,更不用说永久性了。你能给我们一个每个列名到你期望从你的例子中得到的值的映射吗?你建议用python 3编写这个吗?最新版本的ITI,而不是连接和连接字符串来生成CSV记录,为什么不创建一个字段列表并使用标准库模块将其写入CSV文件?我认为这是正确的方法,字典也一直在给我答案。许多的issues@Serge,检查我的答案。如果您用
csv
模块部分修改了您的部分,我将删除它,只留下您的部分,因为我刚从您离开的地方拿起。
   row = ", ".join([file_name, bot_id, power_status, power_time_stampt, vertical status, vertical_time_stamp])