zoukankan      html  css  js  c++  java
  • 文件相关操作

    1、文件各种模式的区别:
    读模式 r ---1)不能写 2)打开不存在会报错
    写模式 w --1)文件已存在,把文件清空了,再写 2)文件不存在,会新建文件,再写 3)不能读
    追加模式 a 文件末尾增加内容 1)文件已存在,在末尾追加 写 2)文件不存在,新建,再写 3)不能读

    读写模式:r+ 1)可以读,可以写。文件已存在,在末尾追加;文件不存在,报错
    写读模式:w+ 2)不存在,新建;存在 清空后写; 可读可写
    追加读模式:a+ 3)文件已存在,在末尾追加 写 ;文件不存在,新建,再写 ;可读但读不到东西
    2、文件操作:
    f.read() #读文件
    f.readline() #读取一行内容
    f.readlines() #是把文件的每一行放到一个list里面
    f.write('双方都') #写入
    3、操作大文件需要注意:

      对于大文件,读取文件高效的操作方法:

      用上面的read()和readlines()方法操作文件的话,会先把文件所有内容读到内存中,这样的话,内存数据一多,非常卡,高效的操作,就是读一行操作一行,读过的内容就从内存中释放了

    with open('/Users/liuyan/Desktop/file.txt','r') as f:
    for line in f:
    print(line.strip())
    4、方法tell() 和seek()的应用
    需求:
    1、监控日志,如果有攻击,就把ip加入黑名单
    #分析:
    #1、打开日志文件
    #2、把ip地址拿出来
    #3、判断每一个ip出现的次数,如果大于100次的话,加入黑名单
    #4、每分钟读一次
    #直接循环一个文件对象的话,每次循环的是文件的每一行
    #文件句柄 文件对象

    import time

    point = 0 # 每次记录文件指针的位置
    while True:
    all_ips = [] #存放所有的ip地址
    f = open('access.log',encoding='utf-8')
    f.seek(point)#移动文件指针
    for line in f:
    ip = line.split()[0]
    all_ips.append(ip)
    point = f.tell() #记录了指针的位置
    all_ip_set = set(all_ips) #
    for ip in all_ip_set:
    if all_ips.count(ip)>50:
    print('应该加入黑名单的ip是%s'%ip)
    f.close()
    time.sleep(60) #暂停60秒

    # for i in all_ips:
    # if all_ips.count(i)>100:
    # print('攻击的ip是%s'%i)

    5、文件指针
    # 用来记录文件到底读到哪里了
    # f = open('naems','a+',encoding='utf-8')
    # a模式的文件指针是在末尾的
    # f.write('呵呵呵')
    # f.seek(0) #移动文件指针到最前面
    # f.write('鹏妹妹') #移动完文件指针之后,是只能读,写的时候还是在文件末尾写

    6、
    --------------------------------------

    思考:

    # f.close()
    问:怎么查看知道文件没有被关闭? --无法查看,建议使用 with 方法使用文件,可以不用考虑关闭文件。

    建议使用如下方式打开文件使用。
    with open('/Users/liuyan/Desktop/file.txt','r') as f:
    for line in f:
    print(line.strip())
    #确认:打印一行后会打印一空行? 如果不想多打印一空行呢?使用line.strip()
    with open('/Users/liuyan/Desktop/file.txt','r') as fr:
    with open('/Users/liuyan/Desktop/file_bak.txt','w') as fw:
    for line in fr:
    fw.write(line) #写入未多写入一空行
  • 相关阅读:
    windows下面Nginx日志切割
    C#通过DocX创建word
    leetcode 189 Rotate Array
    leetcode 172 Factorial Trailing Zeroes
    leetcode 169 Majority Element 冰山查询
    leetcode 165 Compare Version Numbers
    leetcode 160 Intersection of Two Linked Lists
    【windows-》linux】SCP
    【设计】B端和C端区别
    【Flask】部署
  • 原文地址:https://www.cnblogs.com/liuyanerfly/p/8677527.html
Copyright © 2011-2022 走看看