python中的⽂件读写操作open和with的⽤法f = open("", 'r', encoding='utf-8')
# r  read  只能读不能写,⽂件不存在的时候会报错
# w write ⽂件不存在的话,给创建,不能读,写之前会清空原来的⽂件内容
# a 追加模式不会清空原来的内容追加写,但是不能读
# r+ 读写模式⽂件不存在的时候会报错可读可写,但是写的有问题(在最前⽅写,因为指针在0处)
# w+ 写读模式⽂件不存在的时候给创建清空⽂件内容,然后在写
# a+ 追加模式⽂件不存在的时候给创建可读可写,追加写,但是读不到内容(因为指针在末尾,所以读不到)
>>>>>##⽂件的⽤法>>>>>#
# f.seek(0)  # ⽂件指针移到最前⾯
# adline()  #读取⼀⾏的内容
# adlines() #读取所有⾏的内容,然后放在list  ['明天周⼀今天周⽇好\n', '11\n', '22']
# les3 = f.read()  #读取⽂件的所有内容
#f.seek(0)
# f.truncate()  # 从⽂件指针的问题开始删除内容,结合f.seek()使⽤
# f.tell()  # 当前⽂件指针的位置
f.close()  #open  之后要close 关闭⽂件
####另外⼀种⽂件打开的⽅式:
with open('a.txt') as f, open('b.txt', 'w') as f2:  # 不⽤⼿动关闭  ,可以同时打开两个⽂件
for line in f:
print('每次循环的内容是',line)  #⼀⾏⾏的读
#结合案例:
# 到⽇志⽂件log中超过20次的ip地址(安全漏洞的设置,1分钟读取数据1次,循环读取,到⾼危ip地址)
# 打开⽂件
# 依次读取⽂件的每⾏
# 取到每⾏的ip地址  split
# 获取到的ip值存放字典,存放次数{'ip1':1,'ip2':2,'ip3'}  ip 是key,次数是value
# 循环字典,如果val ⼤于20,那么就输出来
# 每分钟监控上述内容
import  time
point=0
while True:  #⼀直循环
with open('access.log', encoding='utf-8') as f:  # 当前状态下的⽂件内容
f.seek(point)
truncate读ips = {}
for line in f:
ip = line.split()[0]  # 取到ip地址不填写值,默认是空的情况下分隔1
if ip not in ips:  # 判断ip是否出现过,没有出现过ip的次数就是1
ips[ip] = 1
else:  # 出现过的话,次数在原来的基础上+1
ips[ip] += 1
ll()                #获取当前读的位置记录下,下次从该位置再次读
for k, v in ips.items():
if v >= 20:
print('有问题的ip地址是%s' % k)
time.sleep(60)  #等待⼀分钟

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论