比较Excel两列数据,并分别显示差异
本帖最后由 cshadow 于 2023-11-29 22:40 编辑利用 openpyxl 模块,操作Excel,比较Excel两列数据,并分别显示差异(日常工作内容,主要是为了摸鱼)
表格数据样例如下图
A,B两列是需要进行比较的数据(数据源为某网站公开数据);C,D两列是比较结果的输出列
A,B两列数据大都是通过半角逗号分割的人名,且排序为乱序,最后需要得到 C列:A有B无,D列:A无B有 两列数据
试过用 Beyond Compare,但效果一般;方方格子还有其他的倒是没试过
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):
col_a.append(str(col.value))
# 将B列数据拼接为list
for col in list(ws.columns):
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.split(",")
col_d = col_b.split(",")
# 第三列数据为 A有B无
for m in range(0, len(col_c)):
if col_b.find(col_c) == -1:
s_a = s_a + col_c + ','
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.find(col_d) == -1:
s_b = s_b + col_d + ','
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() 本帖最后由 孤狼微博 于 2023-11-30 00:23 编辑
首先感谢你的分享,对于提取差集是非常有用的,如果单纯找出差异行
' ***********************************Start***********************************
在Excel中,对比两列差异的快捷键是:选中两列数据,然后按下Ctrl+\(反引号)键。这将自动高亮显示两列之间的差异。
在WPS中,要对比两列的差异,首先你需要选中需要对比的两列数据。然后按`Ctrl+G`打开定位功能,再选择“行内容差异单元格”,这样,两列中的差异项就会高亮显示出来。 # -*- 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):
col_a.append(str(col.value).strip())# 去除首尾空白字符
# 将B列数据拼接为list
for col in list(ws.columns):
col_b.append(str(col.value).strip())# 去除首尾空白字符
for i in range(0, len(col_a)):
# A有B无
s_a = ''
# A无B有
s_b = ''
# 根据指定分隔符对表格内容进行分隔,如有多种分隔符,需要替换成同一种
col_c = col_a.split(",")
col_d = col_b.split(",")
# 第三列数据为 A有B无
for m in range(0, len(col_c)):
if col_b.find(col_c) == -1:
s_a = s_a + col_c + ','
ws.cell(i + 1, 3).value = s_a.rstrip(',')# 去除末尾的逗号
# 第四列数据为 A无B有
for n in range(0, len(col_d)):
if col_a.find(col_d) == -1:
s_b = s_b + col_d + ','
ws.cell(i + 1, 4).value = s_b.rstrip(',')# 去除末尾的逗号
# 保存上述操作,不写这句,表格内容不会保存
wb.save(path)
def main():
# 指定表格路径
excel_path = r'.\测试数据.xlsx'
compare(excel_path)
if __name__ == '__main__':
main()
感谢分享,支持一下 有什么方法可以实现跨行比较 感谢分享,想请教一下,如果想在指定列替换指定字符串后面的几位的字符串怎么实现?
比如:
dic = {'001':'(cap,①)',‘002’:‘(fob,①)’}
备注列
张三(pnr)李四四(foc)
小明(bat)小美(foc)
要替换掉()内的字符 学习一下 A整列 跟 B整列 比较,把差异选出来,这个用的也很多呀。能否补充? 学习了,感谢分享 孤狼微博 发表于 2023-11-30 00:15
首先感谢你的分享,对于提取差集是非常有用的,如果单纯找出差异行
' ***********************************S ...
没去尝试,感觉很厉害!做个标记,谢谢。
多谢分享,学习了。