我有一个项目,要求我使用openpyxl阅读Excel工作表。在工作表中,我需要查找几列名称相似的列,读取每一列中的数据,并比较每一行的值,仅保留具有相同值的行,并在其他行中存储空白。
我不知道要匹配用户输入的输入字符串的列数,也不知道电子表格中要包含多少行,因此我创建了带有列标题的字典作为键,将列值作为列表。
如何逐行比较值以找出每个列表中的值是否匹配?
这是我拥有的代码:
for row in range(1, num_rows):
for cell in range(1, num_cols):
header_row = str(work_sheet.cell(1, cell).value)
cell_val = work_sheet.cell(row, cell).value
cell_list.append(cell_val)
if header_row in col_dict:
col_dict[header_row].append(cell_val)
else:
col_dict[header_row] = [cell_val]
这给了我这样的字典:
{
'Col B': ['Col B', 'x', 'x', None, 'x', 'x', 'x'],
'Col C': ['Col C', 'x', 'x', 'None', 'x', 'None', 'None'],
'Col A': ['Col A', 'x', 'x', 'None', 'x', 'None', 'x']
}
我想比较每个列表中相应索引处的元素(如果ColB[1]=='x'
和ColA[1]=='x'
和ColC[1]=='x'
,请在'x'
中放入output_list
。 ,在输出列表的索引中放置一个""
。
我可以看到列表,但是如何比较其中的元素?
for key in col_dict.keys():
for i in range(len(col_dict[key])):
print(col_dict[key][i])
答案 0 :(得分:0)
我最终想出了答案:我创建了一个新列表,然后遍历每列。如果该列中的值与“ x”匹配,则将“ x”写入新列表。如果该值与“ x”不匹配,或者新列表中的值为“ None”,则在新字典中放置“ None”。 else子句处理第一个将字典中的第一个列表复制到新列表中,以便将其他字典条目与新列表进行比较。解决方法如下:
if cell_val is None:
cell_val = ''
new_list.append(cell_val)
if column_name in new_list:
new_list[column_name].append(cell_val)
else:
new_list[column_name] = [cell_val]