本帖最后由 cshadow 于 2023-11-29 22:40 编辑
利用 openpyxl 模块,操作Excel,比较Excel两列数据,并分别显示差异(日常工作内容,主要是为了摸鱼)
表格数据样例如下图
excel.jpg
A,B两列是需要进行比较的数据(数据源为某网站公开数据);C,D两列是比较结果的输出列
A,B两列数据大都是通过半角逗号分割的人名,且排序为乱序,最后需要得到 C列:A有B无,D列:A无B有 两列数据
试过用 Beyond Compare,但效果一般;方方格子还有其他的倒是没试过
bcompare.jpg
Python 源码如下
[Python] 纯文本查看 复制代码 #-*- coding: utf-8 -*-
import openpyxl
def compare(path):
# openpyxl 加载指定表格(操作时,表格需要为关闭状态)
wb = openpyxl.load_workbook(path)
# 指定需要操作的 表格页面
ws = wb['Sheet']
# A列数据
col_a = []
# B列数据
col_b = []
col_c = []
col_d = []
# 没有对A,B列中空数据进行特殊处理,如有需要,自行修改
# 将A列数据拼接为list
for col in list(ws.columns)[0]:
col_a.append(str(col.value))
# 将B列数据拼接为list
for col in list(ws.columns)[1]:
col_b.append(str(col.value))
for i in range (0, len(col_a)):
# A有B无
s_a = ''
# A无B有
s_b = ''
# 根据指定分隔符对表格内容进行分隔,如有多种分隔符,需要替换成同一种
col_c = col_a[i].split(",")
col_d = col_b[i].split(",")
# 第三列数据为 A有B无
for m in range(0, len(col_c)):
if col_b[i].find(col_c[m]) == -1:
s_a = s_a + col_c[m] + ','
ws.cell(i+1, 3).value = s_a #末尾会加上 , 不需要的话,改成 ws.cell(i+1, 3).value = s_a[:-1]
# 第四列数据为 A无B有
for n in range(0, len(col_d)):
if col_a[i].find(col_d[n]) == -1:
s_b = s_b + col_d[n] + ','
ws.cell(i+1, 4).value = s_b #末尾会加上 , 不需要的话,改成 ws.cell(i+1, 4).value = s_b[:-1]
# 保存上述操作,不写这句,表格内容不会保存
wb.save(path)
def main():
# 指定表格路径
excel_path = r'.\测试数据.xlsx'
compare(excel_path)
if __name__ == '__main__':
main() |