# #读写模式 r+
# # #打开一个存在的文件时能不能写---能写,把内容写在第一行
# fw=open('user1','r+',encoding='utf-8')
# fw.write('哈哈')
# # #打开一个不存在的文件时会不会报错---会报错
# fw1=open('user3','r+')
#
# #写读模式 w+
# #打开一个已经存在的文件时,能不能读-----能读,读不到内容,因为w会清空之前文件的内容
# fw=open('user1','w+')
# fw.read()
#
# #追加模式 a+
# #打开一个已经存在的文件时,能不能读----能读,读不到内容,因为文件指针在最后,需要把文件指定移到最前面
# fw=open('user','a+')
# fw.read()
#文件指针
#写 用a+时,必须先写read再写write
fw = open('abc','a+',encoding='utf-8')
# fw.write('abc
')
# fw.write('hhhhhhhhh
')
#读
fw.seek(0)#移到文件指针到最前面,写的时候在后面给你追加
G=fw.read()
print(G)
fw.write('abc,123')
print(G)
# fw.flush()#刷新缓冲区,立即写到磁盘上
import time #实现每分钟
# time.sleep(5)#停60s
# print('hhh')
#监控日志脚本
#需求
# 每分钟监控服务器日志,请求超过200次的IP,加入黑名单
#读文件,获取到每行的内容 open rendlins
#找到ip地址,分隔字符串按照空格分隔,取第一个元素split
#定义一个空字典,把每个ip地址放到字典里面,每个ip出现一次ip的次数就+1
#判断Ip次数,是否大于200,加入黑名单
#问题:
#第一分钟读的时候从头开始读,到第二分钟的时候文件指针又从头开始读,会读到很多重复的Ip,需要记住位置,第二分钟从第一次读到的位置开始读
seek=0
while True:#死循环
dict = {}#ip放在循环里面是因为ip每分钟都需要重新定义字典,如果放在循环外面就不会重新定义字母,每次循环的时候又会把字典里面的内容重新执行一次,就是要字典重置
fw=open('access.log','a+',encoding='utf-8')
fw.seek(seek)
P=fw.readlines()
for i in P:
#获取所有ip到字典里
ip=i.split()[0]
# print(ip)
if ip not in dict:
dict[ip]=1
else:
dict[ip]+=1
# print(dict)
seek=fw.tell()#记录读完之后的位置
for ip,count in dict.items():
if count>200:
print('大于200的ip是:%s,它的次数是:%s'%(ip,count))
time.sleep(10)