python表格数据过滤复制到另外一个表格

一.表格功能

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))









上一篇:prometheus监控


下一篇:如何利用Bindsnet-Python模拟脉冲神经网络(SNN)?Part III. 运行仿真程序(Running Simulations)