栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python 实现两个excel表格数据的对比--代码

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python 实现两个excel表格数据的对比--代码

python 实现两个excel表格数据的对比--代码:

from openpyxl import load_workbook
import os
import time
from psutil import net_if_addrs
import pickle
import  sys
import json
from colorama import init
from colorama import Fore,Back,Style
from openpyxl.styles import PatternFill   # 导入背景色





gloablist=[]   #


# 把excel表格中第六列device id 31010100581394000030  -->20设备id,把上述设备id都是放入gloablist列表中
# 然后把列表中数据存储进入db.json文件中
def impotdatalib():
    gloablist = []
    pvg10 = input("pvg数据导出的gbid表格入库:")
    pvg10 = pvg10.strip()
    if (not pvg10.endswith("xlsx")):
        pvg10 = (pvg10 + ".xlsx")
    print("生成入库索引文件,请等待...")

    wb = load_workbook(pvg10)
    sheet = wb["data"]   #单元薄必须是“data"
    max_row = sheet.max_row+1
    print("导入数据rows:",max_row)
    max_column = sheet.max_column+1
    print("导入数据columns:",max_column)

    for i in range(1, max_row):
        for j in range(1, max_column):
            if (j == 6):  # device id 31010100581394000030  -->20设备id
                gbid=sheet.cell(row=i, column=6).value
                gloablist.append(gbid)
    print("入库数据总量为:",len(gloablist))

    with open("db.json","w",encoding="utf8") as fjson:
        json.dump(gloablist,fjson,ensure_ascii=False)   #ensure_ascii=False  避免中文乱码


def mtheread():
    sumcount=len(gloablist)   #总数
    errcount=0     #异常数据数量
    stdcount=0     #正常数量

    # 表格try EXCEPTIO变量的初始化变量
    wbdevice=""
    sheetdestdevide=""
    sz3=""



    print("=========欢迎使用EXCEL表格对比内容事项============")


    while True:

        try:

            sz3 = input("请输入数据治理数据表格,表名sheet[ck]:")
            print(Fore.GREEN+"数据正在预处理中,请稍等...")
            print(Fore.GREEN+"======================..")
            sz3=sz3.strip()
            if (not sz3.endswith("xlsx")):
                sz3 = (sz3 + ".xlsx")


            wbdevice = load_workbook(sz3)  #对方的表格数据读入系统

            sheetdestdevide = wbdevice["ck"]      #请输入数据治理数据表格de sheet--->工作簿 ck
        except Exception as e:
            print(e,"输入表格名称错误,请重新输入!")
            continue

        # 如果成功就是break跳出循环,继续执行下面的代码
        break



    max_row = sheetdestdevide.max_row+1
    # print(max_row)
    max_column = sheetdestdevide.max_column+1
    # print(max_column)

    for i in range(1,max_row):
        for j in range(1,max_column):

            if(j==1):   #对方的excel表格的数据在第一列
                checkvalue=sheetdestdevide.cell(row=i, column=j).value   #取出检测值 “31010100581394000030”
                # print(checkvalue,"qian")
                checkvalue=checkvalue.strip()    #处理检测值多于的符号 如空格等
                # print(checkvalue,"国标ID检测中...")
                # if  sheetdestdevide.cell(row=i,column=j).value==sheet.cell(row=i,column=6).value:
                if  checkvalue in gloablist:    #如果检测值在列表中,就是标准数据stdcount加1


                    stdcount=stdcount+1

                    # print("i行%d,j列%d"%(i,j))
                    sheetdestdevide.cell(row=i, column=16).value=1     #如果检测值在列表中,这个excel表格的第16列数值为1
                    # print("第三列的成绩:",sheetdestdevide.cell(row=i, column=3).value)
                    print(Fore.GREEN+checkvalue+" "+"GBID CHECK....")

                else:
                    sheetdestdevide.cell(row=i, column=16).value = 0  #如果检测值在列表中,这个excel表格的第16列数值为0
                    # sheetdestdevide.cell(row=i, column=16).fill=PatternFill("solid",fgColor="99ccff")   #单元格加背景色
                    sheetdestdevide.cell(row=i, column=16).fill=PatternFill("solid",fgColor="ff0000")   #单元格加背景色--红色
                    errcount=errcount+1   #错误数据加1 计数
                    print(Fore.RED+checkvalue+" "+"GBIDCHECK....")  #打印颜色是红色的



    # print(f"本次检测总数是{sumcount},标准国标id数据数量是{stdcount},需要关注的国标id数量是{errcount};")
    print(Fore.RED+"正在生成数据中,请稍等。。。")

    # 保存文件名称
    newSave="Dest_{}".format(sz3)
    # wbdevice.save("./newdest.xlsx")     #保存数据
    wbdevice.save(newSave)     #保存数据
    print("{}数据已经生成,请去目录中查询!".format(newSave))
    print(f"本次检测检测库总数是{sumcount},检测总数据量为{stdcount+errcount};标准国标id数据数量是{stdcount},需要关注的国标id数量是{errcount};")

    print(time.sleep(1))


# 文档使用说明:
def helpdb():

    msg="""
    =============================两个EXCEL表格数据对比分析==============================
    前提:两个表格,表格1是:工作簿是data  表格2工作簿是ck;
    1.导入excel表格数据,重点关注第六列数据是否是国标编号【31010100581394000030】20位编码;
    同时表格的工作簿一定要是“data"
    2.数据检测表格,重点关注第一列【待检测的编号】,以及第16列【数据写入状态1,0】
    同时表格的工作簿一定要是“ck"
    3.运行“数据检测”稍等一会就是在当前目录下生成“Dest_”开头的文件,关注第16列有1的就是说明有这个数据,0的就是没有这个数据
    =============================两个EXCEL表格数据对比分析==============================
    """
    print(msg)

def dydata():
    print(gloablist[:10])


# 函数字典,对上上面的函数,函数引用的调用,不是函数值的调用。
func_dic = {
    '1':impotdatalib,
    '2':mtheread,
    '3':helpdb,
    '4':dydata,


}


if __name__ == '__main__':
    if os.path.exists("db.json"):

        print("db.json数据加载中....")

        # 启动程序后就是把json文件内容整体读取到gloablist列表中,用于检索数据
        with open("db.json","r",encoding="utf8")as fr:
            gloablist=json.load(fr)


        print("数据加载完毕!")


    while True:
        print('''
            ===两个excel表格数据对比,对比方式GBID===
            ===========功能列表===========
            1.写入数据并且配置,必须先入库
            [如果程序目录下有DB.JSON文件,已经入库,不用再入库!]
            2.数据检测
            3.使用说明
            4.打印列表前10条数据
         

             ''')
        choice = input('请输入功能编号:').strip()
        if choice not in func_dic:
            print("输入正确的编号:")
            continue

        func_dic.get(choice)()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/839820.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号