背景:项目经理小姐姐苦于客户给的资产整理,几mb的ip,需要对其c段分块处理,比如连在一起的就简写,然后我动用了nexpose中的资产分块,去用,8g内存的大工具用来整理资产,好傻x,2333
然后自己就用很菜很差劲的代码实现了,向大家讨教下
文章分类:
下面直接上代码,代码最后有设计思路,最后有利用gif动图,不知道c段整理资产干嘛的,可以看看
利用过程: 直接去execl去复制,然后运行代码,再回到execl就能粘贴了,整个过程只需要一个复制一个粘贴,忽视代码的质量,看实现效果,方便快捷,还是不错的嘛
[Python] 纯文本查看 复制代码
import reimport win32clipboard as wcimport win32apiimport pyperclip#定义 (全局变量)global ip_listglobal ip_list_fglobal start_ipglobal end_ipglobal end_ifip# ip_list=['192.168.1.2','192.168.1.3','222.168.1.1','192.168.1.2','192.168.2.2','192.168.3.2','222.168.2.1','222.168.1.2','192.168.3.3','192.168.4.5','192.168.6.8','192.168.6.7']#获取粘贴板里的内容def getCopyTxet(): wc.OpenClipboard() copytxet = wc.GetClipboardData() wc.CloseClipboard() return str(copytxet)data = getCopyTxet()# 将复制过来的execl数据中已回车符和换行符分成listip_list=data.split("\r\n")try: # 去空元素 ip_list.remove('')except: passprint(ip_list)'''换行 \n回车 \r'''ip_list_f=[]start_ip=''end_ip=''end_ifip=''#去重ip_list = list(set(ip_list))#排序ip_list.sort()#for循环for i in ip_list: print(i) x = 1 matchObj = re.match(r'([0-9]*).([0-9]*).([0-9]*).([0-9]*)', i) # 检查输入 try: if (int(matchObj.group(1))>= 255 or int(matchObj.group(2))>= 255 or int(matchObj.group(3))>= 255 or int(matchObj.group(4))>= 255): print("ip:",i,r"\nerror,please check this ip") break except: print("your input:"+data+"\n error,please check your input") break ''' 起止ip默认值都为list_ip选中的ip ''' end_ip = i start_ip = i end_ifip = matchObj.group(1)+'.'+matchObj.group(2)+'.'+matchObj.group(3)+'.'+str(int(matchObj.group(4))+x) start_ifip = matchObj.group(1)+'.'+matchObj.group(2)+'.'+matchObj.group(3)+'.'+str(int(matchObj.group(4))-x) print(end_ifip) print(end_ifip+":"+str(end_ifip in ip_list)) # list.remove(obj) while(end_ifip in ip_list): ip_list.remove(end_ifip) end_ip = end_ifip x+=1 end_ifip = matchObj.group(1)+'.'+matchObj.group(2)+'.'+matchObj.group(3)+'.'+str(int(matchObj.group(4))+x) print("finish ip_list end_ip,connect start_ip....") while(start_ifip in ip_list): ip_list.remove(start_ifip) start_ip = start_ifip x+=1 end_ifip = matchObj.group(1)+'.'+matchObj.group(2)+'.'+matchObj.group(3)+'.'+str(int(matchObj.group(4))-x) print("finish ip_list start_ip") # list.append('obj') if (start_ip == end_ip): ip_list_f.append(i) else: ip_list_f.append(start_ip + '-' + end_ip)global zhizhi =''for i in ip_list_f: zhi=zhi+i+"\r\n"pyperclip.copy(zhi)print(zhi)'''设计思路'''#定义 (全局变量)'''list1 归类前ip段list2 归类后的ip段ip_start ip_end'''#输入转换'''先将复制过来的execl数据转换成list'''#检查输入'''matchObj.group(1) 255'''#排序'''ip_list.sort()'''#去重'''list(set(list_obj))'''#for循环'''1检查第i个ip 使用re切片2将c段+1匹配list1里是否有一样的3有 则删除list1中的目标,然后该c段再+2重复【2】操作4没有 则[设置ip_end变量为+i的ip]将c段-1 匹配list1是否有该元素5有 则删除list1中的目标,然后该c段再-2重复【4】操作6没有 则[设置ip_start变量为-i的ip]7.1 if ip_start和ip_end 一样,则添加该ip,就不进行下面拼接了7.2添加list2中元素 前面切片的内容+ip_start+"-" +ip_end8返回【1】处理第二个元素'''