zoukankan      html  css  js  c++  java
  • python 资产扫描01

    本地建立的三个文件:

    Asset1.txt 用来保存扫描到的资产

    Asset2.txt 用来导入给定的资产

    Repeat.txt 保存重复的资产

    程序的功能:

    1.资产扫描,以 位置:资产 格式保存到Asset1文件中,如果资产重复,将重复的资产保存到Repeat文件中,按Q退出

    2.资产比对,比对Asset1和Asset2 中的资产信息,输出两个文件的对称差集,即为有问题的资产

    3.查看重复资产

    4.清空所有数据 

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2017/11/21 0021 16:01
    # @Author  : ming
    
    import re
    import stat, os
    import time
    
    
    def Number():
        """
        :在第一行输出总资产数量信息
        """
        filename = "Asset1.txt"
        with open(filename) as myfile:
            lines = len(myfile.readlines())
            myfile.close()
            print "33[5;37;44mTotal assets: [%s] in %s33[0m" % (lines, filename)
    
    
    def Repeat(asset):
        """
        :param asset:  资产信息参数
        :return: True代表资产重复,False代表资产没有重复
        """
        with open("Asset1.txt") as myfile:
            for i in myfile.readlines():
                asset2 = re.sub("-", "-", asset)
                p = re.compile("%s$" % asset2)
                existence = p.findall(i)
                if len(existence) != 0:
                    if asset == existence[0]:
                        return True
            return False
    
    def SCAN():
        locate = "NONE"  # 默认位置
        ass = "NONE"  # 默认资产
        prompt = "This is prompt information"  # 默认提示语
        rock_list = []  # 当前机架资产列表
    
        os.chmod('Asset1.txt', stat.S_IWRITE)  # 取消只读
        flag = True
        with open("Asset1.txt", "r+") as file:
            file.seek(0, 2)
            while flag:
                os.system("cls")
                Number()  # 在第一行输出总资产数量信息
                print ("33[1;33;44mCurrent rack locate: %s33[0m" % locate)  # 输出当前所在机架
                print (prompt)  # 输出操作提示语
                print ("The current rack has scanned asset num: %d" % len(rock_list))  # 输出当前机架已经扫描的资产信息
                for i in rock_list:  # 打印当前机架已经扫描的资产
                    print i
                scan = raw_input("Please scan["Q" to quit]:")
                scan = scan.strip().upper()
                if re.search("Rd{1,2}Cd{1,2}", scan):  # 判断是否为位置信息
                    locate = scan
                    prompt = "33[1;32;44mLocation update successful33[0m"
                    del rock_list[:]
                    continue
                elif re.search("w+-w-w+", scan):  # 判断是否为资产信息
                    asset = scan
                    repeat = Repeat(asset)  # 判断资产是否重复
                    if repeat == True:
                        prompt = "33[1;31;44mAsset information repetition!!!33[0m"
                        repeat_data = ("%s:%s" % (locate, asset))  # 重复资产写入新文件
                        with open("Repeat.txt", "r+") as repete_file:
                            repete_file.seek(0, 2)
                            repete_file.write("%s
    " % repeat_data)
                            repete_file.flush()
                        continue
                    elif repeat == False:
                        pass
                elif scan == "Q" or scan == "q":  # 判断是否退出
                    break
                else:  # 输入错误
                    prompt = "33[1;31;44mInput error!!!33[0m"
                    continue
                data = ("%s:%s" % (locate, asset))
                if locate != "NONE" and asset != "NONE" and scan != "" and repeat != True:  # 写入文件
                    file.write("%s
    " % data)
                    file.flush()
                    rock_list.append(asset)
                    prompt = "33[1;35;44mAsset update successful33[0m"
                else:
                    prompt = "33[1;35;44mLocation or assets are empty33[0m"
        os.chmod('Asset1.txt', stat.S_IREAD)  # 设置只读
    
    
    def CHECK():
        """
        #比对
        :return: set1中存在set2中不存在;set2中存在set1中不存在
        """
        set1 = set([])
        set2 = set([])
        os.chmod('Asset1.txt', stat.S_IWRITE)  # 取消只读
        with open("Asset1.txt", "r+") as file1:
            for line1 in file1.readlines():
                set1.add(line1.strip())
        with open("Asset2.txt", "r+") as file2:
            for line2 in file2.readlines():
                set2.add(line2.strip())
        return set1.difference(set2), set2.difference(set1)
        os.chmod('Asset1.txt', stat.S_IREAD)  # 设置只读
    
    
    def DUP():
        list3 = []
        set4 = set([])
        with open("Repeat.txt", "r+") as file1:
            for line1 in file1.readlines():
                list3.append(line1.strip())
            set4 = set(list3)
            return set4
    
    
    def reset():
        os.chmod('Asset1.txt', stat.S_IWRITE)  # 取消只读
        sure = raw_input("Are you sure clear all data[Y/N]:")
        if sure == "y" or sure == "Y" or sure == "yes" or sure == "YES":
            with open("Asset1.txt", "w") as f1:
                pass
            with open("Asset2.txt", "w") as f2:
                pass
            with open("Repeat.txt", "w") as f3:
                pass
        os.chmod('Asset1.txt', stat.S_IREAD)  # 设置只读
    
    
    def main():
        print "1.Scan assets"
        print "2.Assets verification"
        print "3.Duplicated assets"
        print "4.Clear all data"
        num = raw_input("please choise:")
        if num == "1":
            SCAN()
        elif num == "2":
            A, B = CHECK()
            print ("IN Asset1.txt NOT IN Asset2.txt")
            for i in A:
                print i
            print ("IN Asset2.txt NOT IN Asset1.txt")
            for i in B:
                print i
        elif num == "3":
            C = DUP()
            for i in C:
                print i
        elif num == "4":
            C = reset()
        raw_input("
    Enter to Quit!:")
    
    
    if __name__ == '__main__':
        main()
    View Code
    作者:杨永明
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
  • 相关阅读:
    log4net配置文件详解
    Window 中杀死指定端口 cmd 命令行 taskkill
    weui获取checkbox选中值 带GIF效果演示
    动态新增行数据
    JAVA的WebService创建和使用
    Linux-20211008
    SpringBoot
    winfrom将控件保存为图片
    VB相关记录
    代码编辑说明文档
  • 原文地址:https://www.cnblogs.com/ming5218/p/7885206.html
Copyright © 2011-2022 走看看