python中的文件读写操作open和with的用法

f = open("regist2.txt", 'r', encoding='utf-8')
# r  read  只能读不能写,文件不存在的时候会报错

# w write 文件不存在的话,给创建,不能读,写之前会清空原来的文件内容

# a 追加模式 不会清空原来的内容 追加写,但是不能读

# r+ 读写模式 文件不存在的时候会报错 可读可写,但是写的有问题(在最前方写,因为指针在0处)

# w+ 写读模式 文件不存在的时候给创建 清空文件内容,然后在写

# a+ 追加模式 文件不存在的时候给创建 可读可写 ,追加写,但是读不到内容(因为指针在末尾,所以读不到)

###########################文件的用法##########################
# f.seek(0)  # 文件指针移到最前面
# les=f.readline()  #读取一行的内容
# les3=f.readlines() #读取所有行的内容,然后放在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)
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
point=f.tell() #获取当前读的位置记录下,下次从该位置再次读
for k, v in ips.items():
if v >= 20:
print('有问题的ip地址是%s' % k)
time.sleep(60) #等待一分钟


猜你喜欢

转载自www.cnblogs.com/skyxiuli/p/10704433.html
今日推荐