实现表格数据的对比并且标注
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
#程序思路 1.读入我方从p10导出的所有地市的数据表格sheet-->data
# 2.读入数据治理的导出的数据的,sheet为“ck”
# 3.导入所有数据的国标id到一个gloablist=[]这里,导出完毕后检索
# 4.循坏表中的国标ID那列,判断每个id是否在“gloablist=["这里,在这里就是在力源检索表的16列添加数字1,否则添加0
# ------
# 优化版本,优化存入数据到本地json格式,软件启动后直接读取到内存为列表形式,然后在对对比
# gbid--->list
#优化输入表格输入名称错误的问题,简单优化下
gloablist=[]
def impotdatalib():
gloablist = []
pvg10 = input("Vvg数据导出的gbid表格入库:")
pvg10 = pvg10.strip()
if (not pvg10.endswith("xlsx")):
pvg10 = (pvg10 + ".xlsx")
wb = load_workbook(pvg10)
sheet = wb["data"]
max_row = sheet.max_row+1
print(max_row)
max_column = sheet.max_column+1
print(max_column)
for i in range(1, max_row):
for j in range(1, max_column):
if (j == 6): # 设备名称,j是数据源的列信息。 #如果第二列数据与对方的第6列数据进行国标编号的对比,如果相等,就是在检测表的第三列添加数字1,否则0
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): #设备名称,j是数据源的列信息。 #如果第二列数据与对方的第6列数据进行国标编号的对比,如果相等,就是在检测表的第三列添加数字1,否则0
checkvalue=sheetdestdevide.cell(row=i, column=j).value
# 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=stdcount+1
# print("i行%d,j列%d"%(i,j))
sheetdestdevide.cell(row=i, column=16).value=1
# print("第三列的成绩:",sheetdestdevide.cell(row=i, column=3).value)
print(Fore.GREEN+checkvalue+" "+"GBID CHECK....")
else:
sheetdestdevide.cell(row=i, column=16).value = 0
errcount=errcount+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 fludb():
sm="""
# ------
# 优化版本,优化存入数据到本地json格式,软件启动后直接读取到内存为列表形式,然后在对对比
# gbid--->list
"""
print(sm)
def dydata():
print(gloablist[:10])
# 函数字典,对上上面的函数,函数引用的调用,不是函数值的调用。
func_dic = {
'1':impotdatalib,
'2':mtheread,
'3':fludb,
'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条数据
===========2022-3-3=======
''')
choice = input('请输入功能编号:').strip()
if choice not in func_dic:
print("输入正确的编号:")
continue
func_dic.get(choice)()
|