吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3058|回复: 37
收起左侧

[Python 原创] 比较Excel两列数据,并分别显示差异

  [复制链接]
cshadow 发表于 2023-11-29 22:35
本帖最后由 cshadow 于 2023-11-29 22:40 编辑

利用 openpyxl 模块,操作Excel,比较Excel两列数据,并分别显示差异(日常工作内容,主要是为了摸鱼)

表格数据样例如下图

excel.jpg

excel.jpg


A,B两列是需要进行比较的数据(数据源为某网站公开数据);C,D两列是比较结果的输出列

A,B两列数据大都是通过半角逗号分割的人名,且排序为乱序,最后需要得到 C列:A有B无,D列:A无B有 两列数据

试过用 Beyond Compare,但效果一般;方方格子还有其他的倒是没试过

bcompare.jpg

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()

免费评分

参与人数 6吾爱币 +9 热心值 +6 收起 理由
whiskyjl + 1 谢谢@Thanks!
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
ah000001 + 1 谢谢@Thanks!
Natu + 1 + 1 谢谢@Thanks!
38342175 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
blindcat + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

孤狼微博 发表于 2023-11-30 00:15
本帖最后由 孤狼微博 于 2023-11-30 00:23 编辑

首先感谢你的分享,对于提取差集是非常有用的,如果单纯找出差异行
' ***********************************Start***********************************

在Excel中,对比两列差异的快捷键是:选中两列数据,然后按下Ctrl+\(反引号)键。这将自动高亮显示两列之间的差异。

在WPS中,要对比两列的差异,首先你需要选中需要对比的两列数据。然后按`Ctrl+G`打开定位功能,再选择“行内容差异单元格”,这样,两列中的差异项就会高亮显示出来。

免费评分

参与人数 7吾爱币 +5 热心值 +6 收起 理由
Eee1 + 1 + 1 谢谢@Thanks!
苏紫方璇 + 1 + 1 用心讨论,共获提升!
ddddx + 1 谢谢@Thanks!
a2f88 + 1 + 1 这个必须记住了!
liuminpu + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
38342175 + 1 + 1 热心回复!
阿枫 + 1 热心回复!

查看全部评分

JKARES 发表于 2023-12-2 16:16
# -*- 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).strip())  # 去除首尾空白字符

    # 将B列数据拼接为list
    for col in list(ws.columns)[1]:
        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[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.rstrip(',')  # 去除末尾的逗号

        # 第四列数据为 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.rstrip(',')  # 去除末尾的逗号

    # 保存上述操作,不写这句,表格内容不会保存
    wb.save(path)


def main():
    # 指定表格路径
    excel_path = r'.\测试数据.xlsx'
    compare(excel_path)


if __name__ == '__main__':
    main()
meder 发表于 2023-11-29 23:40
jesaiahsean 发表于 2023-11-30 00:35
有什么方法可以实现跨行比较
storm2k 发表于 2023-11-30 06:21
感谢分享,想请教一下,如果想在指定列替换指定字符串后面的几位的字符串怎么实现?
比如:
dic = {'001':'(cap,①)',‘002’:‘(fob,①)’}

备注列
[001]张三(pnr)  [002]李四四(foc)
[005]小明(bat)  [003]小美(foc)

要替换掉()内的字符
blindcat 发表于 2023-11-30 06:33
学习一下
dx163 发表于 2023-11-30 08:06
A整列 跟 B整列 比较,把差异选出来,这个用的也很多呀。能否补充?
TangTonT 发表于 2023-11-30 08:15
学习了,感谢分享
wapjsx 发表于 2023-11-30 08:22
孤狼微博 发表于 2023-11-30 00:15
首先感谢你的分享,对于提取差集是非常有用的,如果单纯找出差异行
' ***********************************S ...

没去尝试,感觉很厉害!做个标记,谢谢。
luoyin168 发表于 2023-11-30 08:28

多谢分享,学习了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 09:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表