zoukankan      html  css  js  c++  java
  • 【5】python文件读写操作、集合(set)

    一、文件操作

    文件读写步骤:有一个文件,打开文件,操作文件读写文件,关闭文件。

    python 文件读写模式r,r+,w,w+,a,a+的区别(附代码示例)

     

    模式 可做操作 若文件不存在 是否覆盖
    r 只能读 报错 -
    r+ 可读可写 报错
    w 只能写 创建
    w+  可读可写 创建

    a   只能写 创建 否,追加写
    a+ 可读可写 创建 否,追加写

    
    
     

    这里假设在当前目录下有一个文件名为users.txt的文本文件,里面的数据如下:

    yangfan,123123123
    niudashen,123123123
    xiaohong,123123123

    1、文件基本操作

    # 第一步:(以追加模式)打开文件
    f=open('users.txt','a+')
    # 第二步:读取文件内容
    print(f.read())
    # 第三步:文件写操作
    f.write('yangfan,4444
    ')
    # 第三步:关闭文件
    f.close()

    2、文件读操作

    # 读取整个文件内容
    f=open('user.txt','r+')
    
    # 获取到文件里面所有的内容,返回的是字符串
    print(f.read())
    
    # 获取到文件里面所有的内容,放在一行的list里面
    # ['yangfan,123123123
    ', 'niudashen,123123123
    ', 'xiaohong,123123123
    ']
    print(f.readlines()) 
    
    # 一次获取一行数据,读取文件指针所在行,再次读时会从下一行开始
    print(f.readline()) # yangfan,123123123
    print(f.readline()) # niudashen,123123123
    
    # 读写二进制文件:rb、wb、ab
    # "b"表示处理二进制文件,适用于图片、音乐、视频等等等等
    res=open('333.jpg','rb')
    
    # 高效处理文件
    #大文件时,用上面的read()和readlines()方法操作文件的话,会先把文件所有内容读到内存中,这样的话内存数据一多会非常卡,读取文件高效的操作方法,就是读一行操作一行,读过的内容就从内存中释放了。
    #以下这种方式,line就是每行文件的内容,读完一行的话,就会释放一行的内存
    f = open('file.txt')
    for line in f:
        print(line)

    3、修改文件的两种方式

    # 一种是把文件的全部内容都读到内存中,然后把原有的文件内容清空,重新写新的内容;
    f = open(r'C:Users
    hyDesktopfile.txt',encoding='utf-8')
    res = f.read().replace('一点','二点')
    f.close()
    f = open(r'C:Users
    hyDesktopfile.txt',mode='w',encoding='utf-8')
    f.write(res)
    f.flush() #立即把缓冲区里面的内容,写到磁盘上
    f.close()
    
    # 第二种是把修改后的文件内容写到一个新的文件中。 with open('file.txt',encoding='utf-8') as f, open('file.txt.bak','w',encoding='utf-8') as f2: for line in f: new_line = line.replace('二点','一点') f2.write(new_line)

     4、小练习:日志监控

    要求:
      1、要从日志里找到1分钟之内访问超过200次的ip
      2、每分钟运行一次
    提示:
      1、读取文件内容,获取到IP地址
      2、把每个ip地址存起来,列表或字典
      3、判断ip访问的次数是否超过200次
      4、超过的话ip加入黑名单

    
    
    import  time
    point = 0 #初始的位置
    while True:
     ips = {}
     f = open('access.log',encoding='utf-8')
     f.seek(point) #移动文件读取指针到指定位置
    
     for line in f :  #循环取文件每行数据
        ip = line.split()[0] #按照空格分割,取第一个元素就是ip
        if ip in ips:# 判断这个ip是否存在
            ips[ip] +=1#如果存在次数+1
        else:
            ips[ip]=1#如果不存在ip的次数就是1
            print(ips)
    
     point = f.tell()#记录文件指针位置
     f.close()
    
     for ip, count in ips.items(): #同时取到 k v,#循环这个字典,判断大于200的
        if count >=200:
            print('%s 加入黑名单'%ip)
     time.sleep(60)
    
    

    二、集合(set)

    集合(set)是一个无序不重复元素的序列。

    集合天生可以去重,可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
    #创建格式
    parame = {value01,value02,...}
    或者
    set(value)
    
    #类型转换
    l=[1,1,2,3,4,5]
    res=set(l)
    print(res)
    #{1, 2, 3, 4, 5}

    1、集合的交集和并集

    jihe=set() # 定义一个空的集合
    
    xingneng=['','','','']
    zidonghua=['','','']
    
    xn=set(xingneng)
    zdh=set(zidonghua)
    
    #取交集,两个集合都有的取出来
    res1=xn.intersection(zdh)
    res2=xn&zdh
    
    #取并集,把两集合合并到一起,探后去重
    res3=xn.union(zdh)
    
    # 差集,在xn中有,在zdh中没有的
    res4=xn.difference(zdh)
    res5=xn-zdh
    
    #不对称差集,两个里面不重复的
    res6=xn.symmetric_difference(zdh)
    res7=xn ^ zdh
    
    print(res1)
    print(res2)
    print(res3)
    print(res4)
    print(res5)
    print(res6)
    print(res7)
    
    # 结果是:
    # {'一', '二'}
    # {'一', '二'}
    # {'三', '五', '一', '四', '二'}
    # {'三', '四'}
    # {'三', '四'}
    # {'三', '五', '四'}
    # {'三', '五', '四'}

    2、集合实例

    import string
    l1=set(string.ascii_lowercase)#打印全部的英文字母
    l2={'a','b','c'}
    #判断l2是不是l1的子集
    print(l2.issubset(l1))
    
    #有交集返回False,没有交集返回Ture
    print(l1.isdisjoint(l2))

     3、集合中增加元素

    # 集合中增加删除元素
    l2.add('s')# 增加元素
    l2.remove('a')# 删除指定元素
    l2.pop()# 删除随机元素,因为没有下标,所以不能找下标删除

    4、集合的循环

    for l in l1:
        print(l)
    
    
    







  • 相关阅读:
    Mybatis与Spring集成
    Mybatis 多对多
    Mybatis表关联多对一
    Mybatis表关联一对多
    Mybatis增删改查(CURD)
    Mybatis接口注解
    MyBatis环境配置及入门
    MyBatis教程
    Spring JDBC StoredProcedure类示例
    Spring JDBC SqlUpdate类示例
  • 原文地址:https://www.cnblogs.com/haifeima/p/9557611.html
Copyright © 2011-2022 走看看