下面的代码表示一个示例a日志数据,我正在尝试转换并导出到CSV。它可以有警告和错误的嵌套dict(例如:代理1),也可以没有警告或错误的dict(例如:代理2)
dlog = \
[
{
'agentName': 'agent 1',
'date': '2018-03-26',
'fileName': 'log_2018-3-26.log',
'warning':
{
'Street': 618,
'Suite': 470,
'TargetID': 558,
'Error loading page frame': 27,
'writeOverride': 51,
'State': 53,
'Zip': 52,
'PhoneNumber': 5
},
'error':
{
'Locations error handling': 1,
'The web browsers are not responding': 13
}
},
{
'agentName': 'agent 2',
'date': '2018-03-26',
'fileName': 'log_2018-3-26.log'
}
]
with open('C:\\users\\dbrewer\\documents\\LastLogTest.csv', 'w', newline='')
as csvOutput:
fieldnames = ['agentName', 'date', 'fileName', 'warnings', 'warningCount', 'errors', 'errorCount']
dict_writer = csv.DictWriter(csvOutput, fieldnames)
dict_writer.writeheader()
for d in dlog:
dict_writer.writerow(d)
这是我得到的输出:
正如您所看到的,我并没有按照我想要的方式分解嵌套的dict来警告和错误。我已经能够生成一个数据集,将嵌套的dict值转换为列
这部分是正确的
但是,这对工作数据不起作用,因为有几十个不同的警告和错误键,其中一些相当长。我需要的是导出嵌套警告和错误dict中每个键、值对的相关键、值对(agentName、date、fileName)。这将为数据集生成9行7列(如下所示)
这是我需要的输出:
显然有一个解决方案,但我在这里找到的只是将嵌套键转换为列(而不是行)的示例。解决这种转变的最佳方法是什么
可以创建一个函数来展平结构:
输出:
相关问题 更多 >
编程相关推荐