1、集合
1 # 新的数据类型集合:天生去重 2 3 # ----------定义---------- 4 s = set() #空的集合 5 s2 = { #有内容的集合,输出时自动去重 6 '1', 7 '2', 8 '2', 9 '3', 10 } 11 12 13 # ----------天生去重---------- 14 print(s2) #{'2', '3', '1'} 15 # 如果是数组list的话,去重必须用for循环count函数,可以利用集合方面去重 16 # 集合是无序的,没有办法取到下标,每次输出内容可能都不一样 17 18 # ----------添加值---------- 19 # 20 s3 = {1,3,4} 21 s3.add('4') #s3={1,3,4} 22 # 重复的自动不会添加 23 24 # ---------- 删除值---------- 25 s2.remove('1') 26 s2.pop()#随机删除一个值 27 28 # ----------交集、并集、差集---------- 29 # 交集:两者中共有的部分 30 print(s2.intersection(s3)) #两者之间都有的 31 print(s2&s3) 32 33 # 并集:合并所有的内容 34 print(s2.union(s3)) 35 print(s2|s3) 36 37 # 差集:A集合中有但是B集合中没有的部分 38 s2 = { #集合,输出时自动去重 39 '1', 40 '2', 41 '8', 42 '3', 43 } 44 s3 = { #空的集合 45 '1', 46 '2', 47 '6', 48 '3', 49 } 50 print(s2.difference(s3)) #S2中存在,s3中不存在的,8 51 print(s2-s3) #S2中存在,s3中不存在的,8
2、练习,监控日志脚本
日志文件中同一个ip地址只能访问200次,超过加入黑名单
1 # 1,如果同一个ip地址60s内只能访问200次,超过的话,将ip加入黑名单 2 # 需求分析 3 #1,60s读一次文件 4 #分割,取到第一个元素,ip地址 5 #把所有ip加到一个list里,如果ip次数超过200次,加入黑名单 6 7 import time 8 point = 0 9 while True: 10 ips = [] #存放所有ip地址 11 blk_set = set() #存放需要加入黑名单的ip,因为集合是去重的,所以没有重复ip 12 with open('access.log',encoding='utf-8') as f: 13 f.seek(point) 14 for line in f: 15 ip = line.split()[0] 16 ips.append(ip) 17 if ips.count(ip)>10: 18 blk_set.add(ip) 19 print(blk_set) 20 for ip in blk_set:#这里是因为防止ip重复加入黑名单,去重 21 print('%s加入黑名单'%ip) 22 point = f.tell() 23 time.sleep(60) #间隔60s监控一次