python学习笔记(五)-文件操作2
一、文件修改
现有文件file.txt,内容如下:
二十四节气歌
春雨惊春清谷天,
夏满芒夏暑相连。
秋处露秋寒霜降,
冬雪雪冬小大寒。
上半年逢六廿一,
下半年逢八廿三。
每月两节日期定,
最多相差一二天。
要求:将文件中‘一’替换成‘二’。
方法一
思路:
1、读取全部文件内容
2、将要修改的内容替换掉,并删除原先内容
3、将修改后的内容,写入文件中
with open('file','a+',encoding='utf-8') as f: f.seek(0) #制定到文件开始的位置 all = f.read() new_all = all.replace('一','二') #替换文件内容 f.seek(0) f.truncate() #从当前位置开始删除文件内容 f.write(new_all) f.flush()
方法二
思路:
1.读取一行修改一行。 ×
2.利用临时文件保存修改后的内容,在修改结束后原来文件删除掉,临时文件修改文件名替换成原文件。
import os with open('file',encoding='utf-8') as f,open('file.bk','w',encoding='utf-8') as f2: for line in f: new_line = line.replace('一','二') #替换文件内容 f2.write(new_line) os.remove('file') #删除原来文件 os.rename('file.bk','file') #将临时文件改名
二、文件读写
比如将网站中的图片下载到本地保存起来。 图片、视频都要以二进制方式保存的,所以打开文件方式要采用rb、ab、wb,以二进制模式打开。
import requests url = 'https://www.cnblogs.com/images/logo_small.gif' img = requests.get(url).content f = open('hhh.jpg','wb')# bytes ,以二进制模式打开 f.write(img)
三、监控日志脚本
如果同一个ip地址60s之内访问超过200次,那么就把ip加入黑名单
需求分析:
1、60秒读一次文件
2、分割,取到第一个元素,ip地址
3、把所有的ip加入到一个list里,如果ip次数超过200次,加入黑名单
import time point = 0 #文件指针 while True: ips = []#存放所有的ip地址 blk_set = set() #存放需要加入黑名单ip with open('access.log',encoding='utf-8') as f: f.seek(point) for line in f: ip = line.split()[0] ips.append(ip) if ips.count(ip)>200: blk_set.add(ip) for ip in blk_set: #这里是因为防止ip重复加入黑名单,因为集合是去重的,所以里面没有重复的ip print('加入黑名单%s'%ip) point = f.tell() time.sleep(30)
import requests
url = 'https://www.cnblogs.com/images/logo_small.gif'
img = requests.get(url).content
f = open('hhh.jpg','wb')# bytes ,以二进制模式打开
f.write(img)