使用Openpyxl检查Excel列中字典键并补充缺失项
问题解决:字典键批量补充到Excel第二列
我知道这听起来简单,但一直做不对。手里有一个字典和一份Excel文件,需求是:遍历字典的每个键,检查该键是否存在于Excel的第二列中;如果不存在,就把它添加到表格末尾,绝对不能覆盖现有数据。现在写了部分代码,但卡壳了,代码如下:
path="some path\test.xlsx" my_dict={'key1':'val1','key2':'val2','key3':'val3'} wb = openpyxl.load_workbook(path) ws=wb.active for i in range(2,ws.max_row+1): cell_data = ws.cell(row=i, column=2) for key in list(my_dict.keys()): if cell_data.value!=key: #print('row'+str(i)+ ' cell2'+': '+cell_obj.value) # print('key: '+key) cell_data.value = key wb.save(path)
现有代码的问题
你的逻辑完全搞反了:你是遍历Excel每行的第二列单元格,只要单元格值不等于某个字典键,就直接修改这个单元格——这会把原有数据全部覆盖,完全不符合「追加不覆盖」的要求。
正确实现代码
from openpyxl import load_workbook # 注意路径里的反斜杠要转义,或者用正斜杠 path = "some path\\test.xlsx" my_dict = {'key1':'val1','key2':'val2','key3':'val3'} wb = load_workbook(path) ws = wb.active # 第一步:收集Excel第二列已有的所有键(从第2行开始,假设第1行是表头) existing_keys = set() for row_num in range(2, ws.max_row + 1): cell_val = ws.cell(row=row_num, column=2).value if cell_val is not None: existing_keys.add(cell_val) # 第二步:把字典中不存在的键追加到表格末尾 for key in my_dict: if key not in existing_keys: next_empty_row = ws.max_row + 1 ws.cell(row=next_empty_row, column=2).value = key # 如果需要同时写入对应的值到第三列,取消下面注释 # ws.cell(row=next_empty_row, column=3).value = my_dict[key] # 保存文件 wb.save(path)
关键说明
- 先把第二列已有的键存入集合,集合的查询速度远快于列表,适合做存在性判断;
- 只对字典中不在Excel里的键进行追加操作,完全不会改动原有数据;
- 路径中的反斜杠必须转义成
\\,或者直接用正斜杠/,否则会报错; - 如果需要同步写入字典对应的值到其他列,直接在追加键的代码后添加对应列的赋值即可。
内容的提问来源于stack exchange,提问作者user_dsp
相关产品推荐
相关产品推荐

