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)
原文地址:https://www.cnblogs.com/lincy/p/8256453.html