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 "\033[5;37;44mTotal assets: [%s] in %s\033[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 ("\033[1;33;44mCurrent rack locate: %s\033[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("R\d{1,2}C\d{1,2}", scan):  # 判断是否为位置信息
                locate = scan
                prompt = "\033[1;32;44mLocation update successful\033[0m"
                del rock_list[:]
                continue
            elif re.search("\w+-\w-\w+", scan):  # 判断是否为资产信息
                asset = scan
                repeat = Repeat(asset)  # 判断资产是否重复
                if repeat == True:
                    prompt = "\033[1;31;44mAsset information repetition!!!\033[0m"
                    repeat_data = ("%s:%s" % (locate, asset))  # 重复资产写入新文件
                    with open("Repeat.txt", "r+") as repete_file:
                        repete_file.seek(0, 2)
                        repete_file.write("%s\n" % repeat_data)
                        repete_file.flush()
                    continue
                elif repeat == False:
                    pass
            elif scan == "Q" or scan == "q":  # 判断是否退出
                break
            else:  # 输入错误
                prompt = "\033[1;31;44mInput error!!!\033[0m"
                continue
            data = ("%s:%s" % (locate, asset))
            if locate != "NONE" and asset != "NONE" and scan != "" and repeat != True:  # 写入文件
                file.write("%s\n" % data)
                file.flush()
                rock_list.append(asset)
                prompt = "\033[1;35;44mAsset update successful\033[0m"
            else:
                prompt = "\033[1;35;44mLocation or assets are empty\033[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("\nEnter to Quit!:")


if __name__ == '__main__':
    main()
View Code

 

posted @ 2017-11-23 15:41  YangYongming  阅读(756)  评论(0编辑  收藏  举报