一.表格功能
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))