一.表格功能
1.表格1 原始数据,需要过滤其中一些字段信息,复制到另一个表格中
2.另外一个表格中需要固定添加固定列的内容
3.从原始表格中复制数据,填充到另外一个表格中
--------
二授权功能的实现
调用了mac地址码,制作了一个简单的授权系统以及如何判断数据,进行登录的验证
三.代码部分
from openpyxl import load_workbook import os import time from psutil import net_if_addrs import pickle import sys # mac地址注册信息码:全局变量 maclist=[] for k,v in net_if_addrs().items(): for item in v: address=item[1] if '-' in address and len(address)==17: # print(address) # 遍历所有mac地址,添加到maclist列表中。 maclist.append(address) #授权系统,获取系统的mac地址作为授权的依据 # 授权文件生成的函数定义 def grandkey0(): if (os.path.exists("ht.key0")) != True: maclist = [] for k, v in net_if_addrs().items(): for item in v: address = item[1] if '-' in address and len(address) == 17: # print(address) maclist.append(address) # 加盐处理,分别在文件前和后都是添加了内容 maclist.append("@@世界人***民大团结&&&") maclist.append("@@###四大名著@@###&&&***!!") maclist.insert(0, "和平的象征和平鸽") # 生成key1 fkey = open("./ht.key0", "wb") pickle.dump(maclist, fkey) fkey.close() """ V2版本主要添加注册的功能,通过获取电脑的MAC进行文件的注册 """ """ 使用说明: 必须的有个模板文件[从视综平台中导出的文件,而且必须带有一行原始数据,作为填写的依据,切记:] """ """ 修改为单机使用的版本 实现读取给定的版本的,可以完成所有数据的填写 """ """ 这个程序是在对应的excel表格的基础上进行的数据分析 表格内容:原始表,pvg生成的数据,【里面只有一个“"Sheet0"】 目标表:要导入视频综合的表【里面包含两个sheet表,"设备信息","通道信息"】 实现的原理,把pvg中的sheet0中的信息,梳理后,自动复制到生成表的的这两个sheet表中-“设备信息","通道信息" """ """ t3版本,需要封装成函数,同时需要批量生成结果数据 """ """ 把所有excel表格加入到列表中进入录入,jobque()的返回结果就是一个装有excel的列表 """ # def jobque(): # # 获得当前路径 # cwd = os.getcwd() # # # 存放进行数据的分析的excel文件目录 # datasource = "{}/data".format(cwd) # # # 列出所有文件 # allfile = os.listdir(datasource) # # 接收excel任务的列表 # quelist = [] # # for item in allfile: # # print(item) # 如果是文件的话 就是打印出来 # if (item.endswith("xlsx")): # # pass #加入到一个应用列表处理 # quelist.append(item) # # return quelist # 在T1基础上完成第二个通道信息的优化填写 # 数据源数据 # 获得最大列和最大行 # print(sheet.max_row) # print(sheet.max_column) # 授权验证 def authkey(): #秘钥生成函数key0,系统一运行就是差生key0 grandkey0() #获取秘钥key1的文件,进行判断,如果失败,就是退出程序 # key1.1.1判断是否存在key1文件,不存在就是退出 if (os.path.exists("ht.key1")) != True: print("请把生成的key0,发起授权,请进行文件的注册!") sys.exit() # 判断key1是否在系统的mac地址中,如果不在就是退出系统 # 获取key1的内容,与系统maclist进行对比,如果有就是登录成功 fkey1 = open("./ht.key1", "rb") listkey1 = pickle.load(fkey1) # print("不匹配的ht.key1,退出系统") if listkey1 not in maclist: sys.exit() def mtheread(): print("=========欢迎使用pvg10.x====>视频综合URM的转换程序============") # print("=================HT2021-11-21V1.0单任务版本================") # print("=====运行程序时候,请关闭相关的excel表格======") pvg10=input("请输入pvg10.x的表格名称:") pvg10=pvg10.strip() if(not pvg10.endswith("xlsx")): pvg10=(pvg10+".xlsx") sz3 = input("请输入导入视频综合平台的模板文件的名称:") sz3=sz3.strip() if (not sz3.endswith("xlsx")): sz3 = (sz3 + ".xlsx") # wb = load_workbook("./pvgnew.xlsx") wb = load_workbook(pvg10) sheet = wb["Sheet0"] # ================ # 生成数据表格,也是需要读取,下面的是模板文件 # wbdevice = load_workbook("./dest.xlsx") wbdevice = load_workbook(sz3) sheetdestdevide = wbdevice["设备信息"] sheetdestchanel = wbdevice["通道信息"] #从模板中的设备信息中---需要把这几个代码取出来,存起来 “设备所属行政区域代码(建议填写) 管辖单位代码(建议填写) 安装地点行政区划代码” #从模板的通道信息中,取出“IP地址(必填)“ areacode=sheetdestdevide.cell(2,9).value unitacode=sheetdestdevide.cell(2,10).value addresscode=sheetdestdevide.cell(2,11).value #获取模板通道中的IP地址那列数据 ipaddress=sheetdestchanel.cell(2,13).value # print(areacode,unitacode,addresscode,ipaddress) # print("=========") max_row = sheet.max_row+1 # 从原始表中去数据,然后存入到新表中 max_column = sheet.max_column+1 for i in range(2,max_row): for j in range(1,max_column): if(j==1): #设备名称,j是数据源的列信息。 sheetdestdevide.cell(row=i,column=j).value=sheet.cell(row=i,column=j).value # 通道信息的数据写入 sheetdestchanel.cell(row=i, column=j).value = sheet.cell(row=i, column=j).value # sheetdestdevide.cell(row=i,column=j).value=sheet.cell(row=i,column=j).value #上面的字段信息是 把原始【pvg】的导出的信息,复制给目标表指定列信息,完成数据交换 elif(j==31): # pvm通道信息,jTSBDUJheS3I sheetdestdevide.cell(row=i, column=2).value = sheet.cell(row=i, column=j).value sheetdestdevide.cell(row=i, column=4).value = sheet.cell(row=i, column=j).value sheetdestdevide.cell(row=i, column=7).value = sheet.cell(row=i, column=j).value # 通道信息的写入 sheetdestchanel.cell(row=i, column=2).value = sheet.cell(row=i, column=j).value sheetdestchanel.cell(row=i, column=4).value = sheet.cell(row=i, column=j).value sheetdestchanel.cell(row=i, column=7).value = sheet.cell(row=i, column=j).value elif(j==6): #国标编号 sheetdestdevide.cell(row=i, column=3).value = sheet.cell(row=i, column=j).value # 通道信息的写入 sheetdestchanel.cell(row=i, column=3).value = sheet.cell(row=i, column=j).value elif (j == 8): # 横坐标 sheetdestdevide.cell(row=i, column=12).value = sheet.cell(row=i, column=j).value elif (j == 9): # 纵坐标 sheetdestdevide.cell(row=i, column=13).value = sheet.cell(row=i, column=j).value # 取生成表最大的行,然后填充,第5,6列,6“设备对象类型--->摄像机”,“摄像” # 取新表的最大行 max_row_dest = sheetdestdevide.max_row + 1 for i in range(2,max_row_dest): sheetdestdevide.cell(row=i, column=5).value="摄像机" sheetdestdevide.cell(row=i, column=6).value="摄像" # 从模板中的设备信息中 - --需要把这几个代码取出来,存起来 “设备所属行政区域代码(建议填写) # 管辖单位代码(建议填写) # 安装地点行政区划代码” # 从模板的通道信息中,取出“IP地址(必填)“ # 调用上面模板中获取的数据“areacode,unitacode,addresscode” sheetdestdevide.cell(row=i, column=9).value=areacode sheetdestdevide.cell(row=i, column=10).value=unitacode sheetdestdevide.cell(row=i, column=11).value=addresscode max_row_chanel = sheetdestchanel.max_row + 1 for i in range(2, max_row_chanel): # 通道信息里面需要写入的内容,12,~~~16列“开流方式(必填) IP地址(必填) 端口号(必填) 用户名(必填) 密码(必填)” sheetdestchanel.cell(row=i, column=13).value = ipaddress sheetdestchanel.cell(row=i, column=12).value = "10.1开流方式" sheetdestchanel.cell(row=i, column=14).value = "2015" sheetdestchanel.cell(row=i, column=15).value = "admin" sheetdestchanel.cell(row=i, column=16).value = "a123456" # print(sheet.cell(row=i,column=j).value) # 保存文件名称 newSave="Dest_{}".format(pvg10) # wbdevice.save("./newdest.xlsx") #保存数据 wbdevice.save(newSave) #保存数据 print("{}数据已经生成,请去目录中查询!".format(newSave)) print("海涛:2021-11-21") print(time.sleep(1)) if __name__ == '__main__': authkey() #授权验证 while(True): try: print("=================HT2021-11-21V1.0单任务版本================") flag=input("是否继续处理数据y/n:") if(flag.lower()=='y'): mtheread() else: break except Exception as e: print(e) print("数据处理完毕,到目录中查询数据!") print(time.sleep(3))