吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3926|回复: 41
收起左侧

[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] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#-*- 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, 2025-5-28 04:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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