python中的文件读写操作open和with的用法
Posted 董小姐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 [‘明天周一今天周日好 ‘, ‘11 ‘, ‘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) #等待一分钟
以上是关于python中的文件读写操作open和with的用法的主要内容,如果未能解决你的问题,请参考以下文章
Python中open和with open有什么区别?怎么用?