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