zoukankan      html  css  js  c++  java
  • Python—集合的操作、文件的操作

    1.集合的操作

    2.文件的操作

    1.集合的操作


    定义:

    1.不同元素组成,自动去重

    2.无序

    3.集合中的元素必须是不可变类型

    1.集合的定义:

     1 >>> s1 = set('abcd')   #同s1 = set{'a','b','c','d'}
     2 >>> s1
     3 {'a', 'c', 'b', 'd'}
     4 >>> t1 = set('cdef')
     5 >>> t1
     6 {'c', 'f', 'e', 'd'}
     7 >>> un_set = set('hello')
     8 >>> un_set
     9 {'h', 'e', 'o', 'l'}
    10 >>> #set是去重的
    11 >>> un_set = frozenset(un_set)  #定义只读集合
    12 >>> un_set
    13 frozenset({'h', 'e', 'o', 'l'})
    14 >>> #定义只读集合

    2.集合的运算:

    集合之间也可进行数学集合运算(例如:并集、交集等),可用相应的操作符或方法来实现。

    #子集

    >>> s1 = set('abcd')
    >>> t1 = set('cdef')
    >>> C = set('ab')  
    >>> C>s1                   #判断C是否为S1子集,用符号表示
    False
    >>> C < s1
    True
    >>> C.issubset(s1)     #用方法.issubset()表示
    True

    #交集:所有的相同元素的集合

    1 >>> t1 = set('cdef')
    2 >>> s1 = set('abcd')
    3 >>> i = s1 & t1
    4 >>> i
    5 {'c', 'd'}
    6 >>> s1.intersection(t1)
    7 {'c', 'd'}

    #并集:集合中所有元素的集合,重复元素只出现一次

    1 >>> s1 | t1                        #符号表示
    2 {'f', 'e', 'a', 'c', 'b', 'd'}  
    3 >>> s1.union(t1)            #方法表示
    4 {'f', 'e', 'a', 'c', 'b', 'd'}

    #差集:s1和t1的差集,所有属于s1且不属于t1的元素集合

    >>> s1 - t1
    {'a', 'b'}
    >>> s1.difference(t1)
    {'a', 'b'}

    #对称差集,s1和t1去掉公共元素后,其余元素的集合

    1 >>> s1 ^ t1
    2 {'f', 'e', 'a', 'b'}
    3 >>> s1.symmetric_difference(t1)
    4 {'f', 'e', 'a', 'b'}

    3.集合的方法

    参考博客,非常详细:https://www.cnblogs.com/suendanny/p/8597596.html

     1  #方法
     2 >>> s = {1,2,3,4,5}
     3 >>> s.add('s')   #增加元素
     4 >>> s
     5 {'s', 1, 2, 3, 4, 5}
     6 >>> 
     7 >>> s.clear()    #清空集合
     8 >>> s
     9 set()
    10 >>> 
    11 >>> s = {1,2,3,4,5}
    12 >>> s
    13 {1, 2, 3, 4, 5}
    14 >>> new_s = s.copy()    #浅copy
    15 >>> new_s
    16 {1, 2, 3, 4, 5}
    17 >>>
    18 >>> 
    19 >>> #pop()
    20 >>> s.pop()      #随机删除,若无,会报错 KeyError
    21 1
    22 >>> s
    23 {2, 3, 4, 5}
    24 >>> 
    25 >>> 
    26 >>> s.remove(2)  #删除指定元素,若指定元素不存在,会报错 KeyError
    27 >>> s
    28 {3, 4, 5}
    29 >>> 
    30 >>> s.discard("3")   #删除集合中的一个元素,如果元素不存在,则不执行任何操作
    31 >>> s
    32 {3, 4, 5}
    33 >>> 
    34 >>> s.discard(3)
    35 >>> s
    36 {4, 5}
    37 >>>
    38 
    39 >>> # 并集.union()                 符号:|     所有元素的集合,重复元素只出现一次
    40 >>> # 交集 .intersection()       符号:&     所有相同元素的集合
    41 >>> # 子集.issubset()             符号:<     判断是否是子集
    42 >>> # 父集.isuperset()            符号:>     判断是否是父集
    43 >>> # 差集.difference()           符号:-     所有属于s1且不属于t1的元素构成新的set
    44 
    45 >>> # 对称差集 .symmetric_difference()   符号:^
    46          #对称差集,去掉公共元素后,其余元素的集合
    47          
    48 
    49 
    50 >>> s1
    51 {'a', 'c', 'b', 'd'}
    52 >>> t1
    53 {'c', 'f', 'e', 'd'}
    54 >>> s1.intersection_update(t1)  #用s1与t1的交集,来替换为s1
    55 >>> s1
    56 {'c', 'd'}
    57 
    58 
    59 >>> s1 = {1,2}
    60 >>> t1 = {2,3,4}
    61 >>> s1.update(t1)   #update
    62 >>> s1
    63 {1, 2, 3, 4}
    64 >>> 
    65 >>> s1.update(['h','i'],{4,5,6})  #方法中直接添加元素,可list和set
    66 >>> s1
    67 {1, 2, 3, 4, 'h', 5, 6, 'i'}
    68 >>> 
    69 
    70 
    71 >>> s1
    72 {1, 2, 3, 4, 'h', 5, 6, 'i'}
    73 >>> t1
    74 {2, 3, 4}
    75 >>> s = {555,666}
    76 >>> 
    77 >>> s1.isdisjoint(t1)  #若s1和t1不存在交集,返回true,否则返回false
    78 False
    79 >>> s1.isdisjoint(s)
    80 True
    81 >>> 
    82 
    83 >>> s1 = {1,2,3,4}
    84 >>> t1 = {2,3,5}
    85 >>> s1.difference_update(t1)  #用s1与t1的差集更新替换为s1
    86 >>> s1
    87 {1, 4}
    88 
    89 
    90 >>> s1 = {1,2,3,4}
    91 >>> t1 = {2,3,5}
    92 >>> s1.symmetric_difference_update(t1) #用s1与t1的对称差集更新替换为s1
    93 >>> s1
    94 {1, 4, 5}

    2.文件的操作


    1.文件的打开模式

    2.文件的读取:注意每次打开文件最后都需要  file.close() 进行关闭,也可直接使用【with】语句打开,其可以自动关闭,具体如下所示:

     1 f = open("yesterday.txt",'r',encoding="utf-8") #文件的句柄,”r“是以只读模式打开
     2 
     3 print(f.read)   #读取yesterday.txt文件内容
     4 print(f.readline)  #读取一行,yesterday.txt文件内容
     5 print(f.readlines)  #将文件输出为一个列表,每一行为列表的一个元素
     6 f.close()
     7 
     8 #建议的写法,逐行读写,在第十行打印分割线
     9  count = 0
    10  for i in f:
    11      count +=1
    12      if count == 10:
    13          print("我是分割线".center(40,'-'))
    14      print(i)
    15 
    16 for i in range(5):           #行数少的时候打印前五行
    17     print(f.readline())
    18 
    19 
    20 #逐行读取文件,在第十行的时候输出分割线,占内存较多的写法,不建议
    21 for index,i in enumerate(f.readlines()):
    22     if index == 9:
    23         print("我是分割线".center(40,"-")+"
    ")
    24     print(i)
    25

    #读取指定路径的文件
    file_path = r'C:Users15302PycharmProjectsGKXXXday2yesterday.txt'   #注意由于路径中出现 ‘U’在python中此转义符其后为Unicode编码,故此处路径要前要加 【r】
    f = open(file_path,'r',encoding='utf-8')
    print(f.read())


    #with语句
    为避免打开文件后忘记关闭,当with代码块执行完毕时,内部会自动关闭并释放文件资源。with使用方法如下:
    with open('file or file_path','r',encoding='utf-8') as file_object:
      print(f.read())
    with open('file or file_path','r',encoding='utf-8') as file_object1 , open('file or file_path','r',encoding='utf-8') as file_object2 #可打开多个
     1 with open('111111.txt','rb') as f2:   
     2     for i in f2:
     3         off = -3
     4         while True:
     5             f2.seek(off,2)
     6             data = f2.readlines()
     7             if len(data)>1:  #当.readlines() len为2时候,证明读了两行
     8                 print("last hang ",data[-1].decode("utf-8"))   #取最后一个值,即最后一行
     9                 break
    10             off *=3 #加大偏移量
    读取文件最后一行

     2.文件的写入:file.writelines(sequence)的参数是序列,比如列表,它会迭代帮你写入文件。

    #w模式,是在文件操作一开始的时候进行判断是否新建和覆盖写入。如果是在文件操作过程中,一直写入也不会覆盖

    1 f = open("yesterday.txt",'w',encoding="utf-8") #文件的打开模式为 ‘w’,此时文件可以写入,文件不存在则新建,若存在则清空再写入,切记注意。
    2 
    3 f.write("莺歌燕舞太守醉,
    ")
    4 f.write("明朝酒醒春已归。
    ")
    5 f.write('枕上诗书闲处好,
    ')
    6 f.write('门前风景雨来佳。')
    7 
    8 f.close()

    关于文件光标,默认在0,.read()后在最后

    with open('111111.txt','r+') as f2:   #txt 文件里为gkxxx,写完后为 2kxxx
        print(f2.tell())   #0
        f2.write('2')
        print(f2.tell())    #1
        f2.read()
        print(f2.tell())    #5
    View Code

      3.文件的方法:

     1 f = open("yesterday.txt",'r',encoding="utf-8")
     2 print(f.readline()) #打印第一行
     3 print(f.tell())  #打印指针位置
     4 print(f.seek(10)) #将指针位置放到第十个字符处,注意虽然可以把指针放到指定处,但是在‘a’,‘r+’模式下,f.write()还是会默认追加到文件末尾,不会在指针处追加
     5 print(f.tell())   #打印指针位置
    >>>>>>>>结果如下所示: 6 Somehow, it seems the love I knew was always the most destructive kind 7 8 72 9 10 10 10
    with open('111111.txt','rb') as f2:    #seek补充用法
        print(f2.readlines())
        print(f2.seek(-2,2))
    >>>
    [b'2kxxx
    ', b'dfdf']   #二进制中的换行 
    
    9   #对于111111.txt中的内容,倒数2个字符,相当于正数9个字符
    
    #seek有三种模式 0,1,2
    0:默认用法
    1:相对位置seek
    2:倒数seek,当用1,2时候,模式要换成rb,

    seek用  seek(int,2) 这种模式读取文件最后一行

     1 with open('111111.txt','rb') as f2:   #读取最后一行的思路
     2     for i in f2:
     3         off = -3
     4         while True:
     5             f2.seek(off,2)
     6             data = f2.readlines()
     7             if len(data)>1:
     8                 print("last hang ",data[-1].decode("utf-8"))
     9                 break
    10             off *=3
    #truncate方法
    1
    f = open("yesterday.txt",'a',encoding="utf-8") 2 f.truncate(10) #截取文件前十个字符,其余内容删除
    >>> somehow,i
    
    
    #flush方法
    1
    import time,sys 2 for i in range(10): 3 sys.stdout.write("#") 4 sys.stdout.flush() 5 time.sleep(0.5) #每隔0.5秒打印一个“#”,一共打印十个

    4.文件的修改

    1 f = open('yesterday.txt','r',encoding='utf-8')
    2 f2 = open('yesterday3.txt','w',encoding='utf-8')
    3 
    4 for line in f:
    5     if "肆意的快乐" in line:
    6         line = line.replace("有那么多肆意的快乐等我享受","有那么多肆意的快乐等Gkx享受")
    7     f2.write(line)
    >>>>>
    将yesterday.txt文件逐行读取,修改其中一行,并write到新文件中
    with open('upload_file','r') as f:
        line = f.readline()
        while line != '':
            print(line)
            line = f.readline()
    判断文件读取结束

                                        

  • 相关阅读:
    从0系统学Android-2.6Activity间数据传递
    观察者模式详解
    从0系统学Android-2.5更多隐式Intent用法
    从 View 的四个构造方法说起
    ListView详细介绍与使用
    推荐一个程序员系统学习网址
    从 http协议角度解析okhttp
    从0系统学Android-2.4隐式Intent
    菜单布局记录篇
    轮播图记录篇
  • 原文地址:https://www.cnblogs.com/gkx0731/p/9428575.html
Copyright © 2011-2022 走看看