我试图用JSON文件中的数据填充excel文件
JSON文件具有以下格式:
"checklist": {
"0": {
"Verdict": "",
"Issue description": "",
"Due date": "",
"Resolution": ""
},
"1": ....
}
它有很多字典都遵循这种格式
Excel文件的第一行有一个标题,第二行的cols上有该字典的键
我需要使用包含等于“FAIL”、“NC”或“ISSUE”的判定值的字典,用JSON文件中包含的数据填充Excel文件的行
我的python代码如下所示:
wb = load_workbook("template.xlsx")
ws = wb['Sheet1']
verdict = ['FAIL', 'NC', 'ISSUE']
for row in ws.iter_rows(min_row=3):
for key in input_data['checklist']:
if input_data['checklist'][key]['Verdict'] in verdict:
row[1].value = input_data['checklist'][key]['Issue description']
row[2].value = input_data['checklist'][key]['Due date']
row[3].value = input_data['checklist'][key]['Resolution']
wb.save('file.xlsx')
我遇到的问题是,Excel文件在许多行中填充了相同的值,而不是每个匹配字典只填充一行
看起来您遇到了一个问题,因为您使用的是嵌套循环:对于每一行,您再次循环检查表,这就是为什么您在每一行中看到相同的值。对于这样的任务,您可以使用zip并行循环多个项目,假设它们具有相同的长度,或者如果您知道一个列表更长,则使用ziplongest。这对于openpyxl中的iter_rows()尤其重要,因为如果工作表是新的,它很快就会耗尽。在这种情况下,使用ws.append()更容易
对于嵌套的数据结构,使用临时变量通常也很有用,以便进行长时间且容易出错的查找
因此,将清单字典转换为如下列表:
在新工作表上,您可以通过先添加两个空工作表前进到第三行:
(类似地,如果要插入(例如)从列C padding=[None]*2而不是A插入,可以用
None
填充确实添加的行。)否则,如果使用现有图纸,则需要手动设置行
但是,由于您有一个条件步骤,这可能会导致不满足条件的空行。在这种情况下,您可以创建自己的计数器–这是不可取的,因为“off by 1”错误是世界上最常见的错误之一,尤其是在openpyxl中,我们使用基于1的索引。这里更好的选择是在开始添加行之前过滤结果
注意:这里的代码只是为了说明如何通过充分利用Python和openpyxl API来解决您的问题。我无法访问您的数据,也没有检查打字错误等
相关问题 更多 >
编程相关推荐