zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    激活
    年龄校验,精确到日
    腾讯消息队列CMQ一键化部署脚本
    腾讯消息队列CMQ部署与验证
    蓝鲸6.0.1部署
    docker离线安装
    蓝鲸平台开启consul.conf UI界面
    基于docker一键化部署LNMP环境
    阿里云镜像上传打包
    腾讯蓝鲸平台部署[5.1.29版本]
  • 原文地址:https://www.cnblogs.com/lincy/p/8256453.html
Copyright © 2011-2022 走看看