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

    一:集合

      集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:

    (1)去重,把一个列表变成集合,就自动去重了。

    (2)关系测试,测试两组数据之前的交集、差集、并集等关系。

    二:有关集合的操作

    1,增

    set1 = {'alex','wusir','ritian','egon','barry'}
    set1.add('景女神')
    print(set1)
    
    #update:迭代着增加
    set1.update('A')
    print(set1)
    set1.update('老师')
    print(set1)
    set1.update([1,2,3])
    print(set1)
    View Code

    2,删

    set1 = {'alex','wusir','ritian','egon','barry'}
    
    set1.remove('alex')  # 删除一个元素
    print(set1)
    
    set1.pop()  # 随机删除一个元素
    print(set1)
    
    set1.clear()  # 清空集合
    print(set1)
    
    del set1  # 删除集合
    print(set1)
    View Code

    3,有关集合的其它操作
    3.1   交集。(&  或者 intersection)

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

    3.2并集。(| 或者 union)

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

    3.3差集。(- 或者 difference)

    set1 = {1,2,3,4,5}
    set2 = {4,5,6,7,8}
    print(set1 - set2)  # {1, 2, 3}
    print(set1.difference(set2))  # {1, 2, 3}
    View Code

    3.4反交集。 (^ 或者 symmetric_difference)

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

     3.5子集与超集

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

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

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

    三:文件操作

    1,文件操作流程

       计算机系统分为:计算机硬件,操作系统,应用程序三部分。我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。有了文件的概念,就无需再去考虑操作硬盘的细节,只需要关注操作文件的流程:

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

    ps:  打开一个文件包含两部分资源:操作系统级打开的文件+应用程序的变量。在操作完毕一个文件时,必须把与该文件的这两部分资源一个不落地回收,回收方法为:f.close()
    2, 文件编码

             f=open()是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8。

    3:文件的打开方式

          通过对文件句柄的操作,来得到你想要的东西,例如下:

    content = f.read()
    print(content)
    f.close #将你这文件句柄,或者是动作关闭,节省内存
    f.close()
    View Code

    4,关于读的五种模式
    4.1,f.read() ,全部读出来。

    4.2,f.readline() 按行读。

    f = open('log',encoding='utf-8')
    line = f.readline()
    print(line)
    line1 = f.readline()
    print(line1)
    f.close()
    View Code

    4.3,f.readlines() 每一行作为一个元素,放在列表中。

    f = open('log',encoding='utf-8')
    lines = f.readlines()
    print(lines)
    f.close()
    View Code

    4.4,循环读取

    f = open('log',encoding='utf-8')
    for i in f:
        print(i)
    f.close()
    View Code

    4.5,f.read(n),r 模式:n 是按照字符读取

    f = open('log',mode='r',encoding='utf-8')
    content = f.read(3)  #r 模式:n 是按照字符读取
    print(content)
    f.close()
    View Code

    5,w,自写模式,如果没有文件,则创建文件写内容,如果有文件则将原文件内容全部删除,再写。

    f = open('log','a',encoding='utf-8')
    f.write('wusir紧跟其后')
    f.close()
    View Code

     6,r+   r+b

    f = open('log','r+',encoding='utf-8')
    print(f.read())
    f.write('fdsaf')
    f.close()
    View Code

    7,w+ w+b

    f = open('log','w+',encoding='utf-8')
    f.write('aaaa')
    f.seek(0)  #移动光标
    print(f.read())
    f.close()
    View Code

    8,a+

    f = open('log','a+',encoding='utf-8')
    f.write('aaaa')
    f.tell()
    print(f.tell())
    f.seek(2)
    # print(f.readable())
    # print(f.read())
    f.close()
    
    f = open('log',encoding='utf-8')
    f.seek(3)  #按照字节调整
    print(f.read())
    f.close()
    
    f = open('log','a',encoding='utf-8')
    f.truncate(3)  #截取 截取前面的内容
    f.close()
    View Code

    9 ,改动文件
    9.1,创建一个新文件

    9.2,读取原文件。

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

    9.4,将原文件删除。

    9.5,将新文件重命名原文件名。

    import os
    with open('log',encoding='utf-8') as f1,
        open('log.bak','w',encoding='utf-8') as f2:
        for i in f1:
            i = i.replace('alex','SB')
            f2.write(i)
    os.remove('log')
    os.rename('log.bak','log')
    View Code
    
    
    
    
    
     

        

  • 相关阅读:
    高斯消元学习
    HDU 4596 Yet another end of the world(解一阶不定方程)
    Codeforces Round #318 div2
    HDU 4463 Outlets(一条边固定的最小生成树)
    HDU 4458 Shoot the Airplane(计算几何 判断点是否在n边形内)
    HDU 4112 Break the Chocolate(简单的数学推导)
    HDU 4111 Alice and Bob (博弈)
    POJ 2481 Cows(线段树单点更新)
    HDU 4288 Coder(STL水过)
    zoj 2563 Long Dominoes
  • 原文地址:https://www.cnblogs.com/leiwei123/p/8385060.html
Copyright © 2011-2022 走看看