【Python】学习笔记3 集合-监控日志脚本

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监控一次
原文地址:https://www.cnblogs.com/amengmeng/p/8260203.html