提问人:Dave 提问时间:11/14/2023 更新时间:11/14/2023 访问量:48
Python openpyxl - 在比较中记录 != 匹配单元格
Python openpyxl - recording != match cells in a comparison
问:
我正在比较两个 Excel 工作簿之间的数据,并在第三个工作簿中记录命中。
这是 Azure-Provider-description.xlsx:
这是 Azure-Scrape,.xlsx:
这是 Azure-Actions:
代码如下:
from openpyxl import load_workbook
wb1 = load_workbook("Azure-Provider-description.xlsx")
ws1 = wb1["Sheet1"]
provider = ""
description = ""
wb2 = load_workbook("Azure-Scrape.xlsx")
ws2 = wb2["Sheet1"]
for row in ws1.iter_rows(min_row=1, max_col=3):
if row[1].value == None:
pass
else:
provider = row[0].value
description = row[1].value
for cell in ws2.iter_rows(min_row=1, max_col=3):
if cell[0].value.startswith(provider) and cell[1].value == description:
cell[2].value = str("'" + cell[0].value + "',")
else:
pass
wb2.save("Azure-Actions.xlsx")
它记录新工作簿 c 列中的命中,但我还需要记录 Azure-Provider-description.xlsx 中与 Azure-Scrape中的任何内容不匹配的行 .xlsx - 我需要做什么?
提前致谢。
答:
0赞
Timeless
11/14/2023
#1
假设你想有条件地将表与一个表进行内部连接,同时保留后者的非匹配项,你可以尝试这样做:2nd
1st
from openpyxl import load_workbook, Workbook
wb1 = load_workbook("Azure-Provider-description.xlsx")
ws1 = wb1["Sheet1"]
wb2 = load_workbook("Azure-Scrape.xlsx")
ws2 = wb2["Sheet1"]
merges = []
for pro1, desc1 in ws1.values:
for pro2, desc2 in ws2.values:
if pro2.startswith(pro1) and desc1 == desc2:
merges.append([pro2, desc1, f"'{desc2},"])
else:
merges.append([pro1, desc1]) # << maybe to be adjusted ?
wb3 = Workbook()
ws3 = wb3.active; ws3.title = "Sheet1"
for row in merges:
ws3.append(row)
wb3.save("Azure-Actions.xlsx")
评论
Microsoft.Advisor/configuration/write
ws2