zoukankan      html  css  js  c++  java
  • 集合文件操作

    集合Set:

    1、集合是无序的,是不重复的。

    2、集合内的元素必须是可哈希的,但是集合本身是不可哈希的。

    3、集合没有索引或者键值对,不能更改里面的元素。

    4、集合可以求交集,并集,差集,反交集。

    去重:

    1、用算法  2、转化成集合,再转换回来

    1 lis = [111,222,33,4,5,6,6,7]
    2 set1 = set(lis)
    3 lis = list(set1)
    4 print(lis)

    集合的操作方法:

    1,集合的创建。

    1 set1 = set({1,2,'barry'})
    2 set2 = {1,2,'barry'}
    3 print(set1,set2)  # {1, 2, 'barry'} {1, 2, 'barry'}

    2,集合的增。

    复制代码
     1 set1 = {'alex','wusir','ritian','egon','barry'}
     2 set1.add('景女神')
     3 print(set1)
     4 
     5 #update:迭代着增加
     6 set1.update('A')
     7 print(set1)
     8 set1.update('老师')
     9 print(set1)
    10 set1.update([1,2,3])
    11 print(set1)
    复制代码

    3,集合的删。

    复制代码
     1 set1 = {'alex','wusir','ritian','egon','barry'}
     2 
     3 set1.remove('alex')  # 删除一个元素
     4 print(set1)
     5 
     6 set1.pop()  # 随机删除一个元素
     7 print(set1)
     8 
     9 set1.clear()  # 清空集合
    10 print(set1)
    11 
    12 del set1  # 删除集合
    13 print(set1)
    复制代码

    4,集合的其他操作:

    4.1 交集。(&  或者 intersection)

    1 set1 = {1,2,3,4,5}
    2 set2 = {4,5,6,7,8}
    3 print(set1 & set2)  # {4, 5}
    4 print(set1.intersection(set2))  # {4, 5}

    4.2 并集。(| 或者 union)

    1 set1 = {1,2,3,4,5}
    2 set2 = {4,5,6,7,8}
    3 print(set1 | set2)  # {1, 2, 3, 4, 5, 6, 7}
    4 
    5 print(set2.union(set1))  # {1, 2, 3, 4, 5, 6, 7}

    4.4反交集(补集)。 (^ 或者 symmetric_difference)

    1 set1 = {1,2,3,4,5}
    2 set2 = {4,5,6,7,8}
    3 print(set1 ^ set2)  # {1, 2, 3, 6, 7, 8}
    4 print(set1.symmetric_difference(set2))  # {1, 2, 3, 6, 7, 8}

    4.5差集

    print(set1 - set2) #set1中有而set2中没有的元素
    print(set1.difference(set2)) #set1中有而set2中没有的元素
    print(set2 - set1) #set2中有而set1中没有的元素

    4.6子集与超集

    复制代码
    1 set1 = {1,2,3}
    2 set2 = {1,2,3,4,5,6}
    3 
    4 print(set1 < set2)
    5 print(set1.issubset(set2))  # 这两个相同,都是说明set1是set2子集。
    6 
    7 print(set2 > set1)
    8 print(set2.issuperset(set1))  # 这两个相同,都是说明set2是set1超集。
    复制代码

    5,frozenset不可变集合,让集合变成不可变类型。

    1 s = frozenset('barry')
    2 print(s,type(s))  # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>

    文件操作

    with方法,可以使程序打开后自动关闭。

    with open('log','r') as f: 
        pass                   
    复制代码
    #1. 打开文件,得到文件句柄并赋值给一个变量
    f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r
    
    #2. 通过句柄对文件进行操作
    data=f.read()
    
    #3. 关闭文件
    f.close()
    复制代码

    PS:

    错误分析:

    1:unicodedecodeError:文件存储和打开的方式不一样

    2:路径中含有 , 时需要在路径之前添加r或者用\转义

    读取文件

    e:新建文本文档.txt    #绝对路径
    同一个文件夹下的文件就是相对路径

    1 f = open('e:新建文本文档.txt','r',encoding = 'gbk')
    2 data = f.read()
    3 print(data)
    4 f.close()

    'r' r模式:只读模式,不写r默认就是只读

    'rb'模式:一般用在非文字类的文件(图片音乐视频),不用添加编码的代码

     r+模式:先读后写  r+b 先读后写(按照位的方式读取)

    f = open('e:新建文本文档.txt','r+',encoding = 'gbk')
    print(f.read())
    f.write('asdadd')
    f.close()

    五种读取模式:

    1、f.read() 全部读出来

    2、f.readline() 按行读

    3、f.readlines() 每一行作为一个元素放在列表中

    4、 推荐方式:循环读取

    f = open('e:新建文本文档.txt','r',encoding = 'gbk')
    for i in f:
        print(i)  
    f.close()

    5、f.read(n)

    r模式按照字符的数目读取

    rb模式按照字节的数目读取

    f = open('e:新建文本文档.txt','r',encoding = 'gbk')
    content = f.read(3)
    print(content)
    f.close()

    补充:bytes-->str  一个汉字3个字节,4,5个会报错

    s = b'xe4xb8xb0.decode(''utf - 8')  print(s)  #丰

    写:

    f.write('alex')若果没有文件,则创建文件写内容,如果有文件则将原文件删除,再写。

    wb模式需要将写入的字符串.encode转换成二进制,并添加编码

    str-->bytes     .encode    bytes-->str    .decode

    写读:w+先写后读     f.seek(0)光标移动到开头

    追加:a  ab

    f = open('e:新建文本文档.txt','a',encoding = 'gbk')
    f.write('3')
    f.close()

    a+追加可读(写读)  a+b

    断点续传用到了tell(光标位置)和seek(n),都是按照字节去调整光标位置。

    .truncate截取,按照字节去截取。(在a+或者a的模式下)

    with open('log','r',encoding = 'utf-8') as f1:

      print(f1.read())

    方法汇总:

    复制代码
      def close(self, *args, **kwargs): # real signature unknown
            关闭文件
            pass
    
        def fileno(self, *args, **kwargs): # real signature unknown
            文件描述符  
            pass
    
        def flush(self, *args, **kwargs): # real signature unknown
            刷新文件内部缓冲区
            pass
    
        def isatty(self, *args, **kwargs): # real signature unknown
            判断文件是否是同意tty设备
            pass
    
        def read(self, *args, **kwargs): # real signature unknown
            读取指定字节数据
            pass
    
        def readable(self, *args, **kwargs): # real signature unknown
            是否可读
            pass
    
        def readline(self, *args, **kwargs): # real signature unknown
            仅读取一行数据
            pass
    
        def seek(self, *args, **kwargs): # real signature unknown
            指定文件中指针位置
            pass
    
        def seekable(self, *args, **kwargs): # real signature unknown
            指针是否可操作
            pass
    
        def tell(self, *args, **kwargs): # real signature unknown
            获取指针位置
            pass
    
        def truncate(self, *args, **kwargs): # real signature unknown
            截断数据,仅保留指定之前数据
            pass
    
        def writable(self, *args, **kwargs): # real signature unknown
            是否可写
            pass
    
        def write(self, *args, **kwargs): # real signature unknown
            写内容
            pass
    
        def __getstate__(self, *args, **kwargs): # real signature unknown
            pass
    
        def __init__(self, *args, **kwargs): # real signature unknown
            pass
    复制代码

    常用方法:

    read、readable、readline、readlines、for循环

    seek、tell、write、writeable(判断是否可写)

    改动文件:

    1、创建一个新文件

    2、读取原文件

    3、将原文件的内容通过你想要的方式进行更改,并写入新文件。

    4、将原文件删除

    5、将新文件重命名

    复制代码
    #改动文件:                      
    #1,创建一个新文件.                 
    #2,读取原文件.                   
    import os                   
    with open('log',encoding='ut
        open('log.bak','w',encod
        # 3,将原文件的内容通过你想要的方式进行更改,
        old_content = f1.read() 
        new_content = old_conten
        f2.write(new_content)   
    # #4,将原文件删除.                
    os.remove('log')            
    # #5,将新文件重命名原文件名.           
    os.rename('log.bak','log')  
    import os                   
    with open('log',encoding='ut
        open('log.bak','w',encod
        # 3,将原文件的内容通过你想要的方式进行更改,
        for i in f1:            
            i = i.replace('alex'
            f2.write(i)         
    #4,将原文件删除.                  
    os.remove('log')            
    #5,将新文件重命名原文件名.             
    os.rename('log.bak','log')  
  • 相关阅读:
    DM9000网卡驱动接受数据从中断方式改成NAPI方式小记
    20130317
    c++版本新浪微博sdk库交叉编译
    新年预期小记
    arm+linux嵌入式系统的终端显示中文乱码解决
    记transmission下载sd卡支持不佳问题
    嵌入式linux自动登录
    SevenArmsSeries.Repositories
    Mybatis开启二级缓存(全局缓存)的方法
    Spring学习之动态代理的简单实现
  • 原文地址:https://www.cnblogs.com/cangshuchirou/p/8392062.html
Copyright © 2011-2022 走看看