• python学习笔记(二)文件操作和集合


    集合:

            集合也是一种数据类型,一个类似列表东西,它的特点是无序的,不重复的,也就是说集合中是没有重复的数据

    集合的作用:

    1、它可以把一个列表中重复的数据去掉,而不需要你再写判断

    2、可以做关系测试,比如说有两个班,一个性能测试班,一个是接口测试班的,想找出来既学习了性能又学习了接口测试的同学,就可以用集合

    定义集合:

    1 list = [1,2,3,4,5,3,6,9,2,5]   #要创建一个set,需要提供一个list作为输入集合:
    2 list_set = set(list)     #这样就定义了一个集合
    3 set1 = set([4,6,3,7,4,6])   #这种方式和上面的一样,也是把一个list转换成一个集合
    4 set2 = {'aa','bb','cc'}   #直接定义一个集合

    集合操作:

     1 set1 = {1,4,7}
     2 set2 = {2,5,8,9}
     3 set1.add(5)  #集合中增加元素
     4 set2.pop()   #集合中随机删除一个元素
     5 set1.remove(1)  #集合中删除指定元素,若指定元素不存在会报错
     6 set1.update({8,10,11})  #把另外一个集合驾到set1中去
     7 set1.discard('15')  #如果删除元素存在,删除,不存在不做处理
     8 set1.isdisjoint(set2)  #判断set1与set2是否是不相交的,不相交返回True
     9 print(set1 & set2) #两集合取交集
    10 print(set1.intersection(set2))  #两集合取交集
    11 print(set1 | set2)  #两集合取并集
    12 print(set1.union(set2))  #两集合取并集
    13 print(set1.difference(set2))  #取差集 在set1中存在,set2中不存在的
    14 print(set1 - set2)
    15 print(set1.issubset(set2)) #判断set1是不是set2的子集
    16 print(set1.issuperset(set2)) #判断set1是不是set2的父集
    17 print(set1.symmetric_difference(set2))  #对称差集
    18 print(set1 ^ set2)

    交换变量:

    在不引入第三个变量的同时交换两个变量的值

    1 a = a+b  
    2 b = a-b  
    3 a = a-b 

    python中的简单用法

    1 b,a= a,b #交换两个变量的值,Python底层帮你引入了一个的第三方变量在交换
    2 a,b,c = c,a,b

    深拷贝与浅拷贝:

    浅拷贝和深拷贝的区别就是深拷贝会重新开辟一个内存空间
     1 import copy
     2 l1=[1,1,2,3,4,5,6,7,8] #循环删list里面的数据的时候,结果会不正确
     3 l2=l1   #浅拷贝
     4 l3=copy.deepcopy(l1)  #深拷贝
     5 print("l1:",l1)
     6 print("l2:",l2)
     7 print("l3:",l3)
     8 print('l1的内存地址是:',id(l1))
     9 print('l2的内存地址是:',id(l2))
    10 print('l3的内存地址是:',id(l3))
    11 
    12 for i in l3:
    13     if i%2!=0:
    14         l1.remove(i)
    15 print(l1)

     布尔类型判断:

    在做条件判断的时候记住:非空即真、非0即真

    不为空的话就是true,是空的话就是false

    只要不是0就是true,是0就是false

     1 name = input('请输入你的名字:').strip()
     2 a = [] #false
     3 d={} # false
     4 c = 0 #false
     5 f = tuple() #false
     6 e='' #false
     7 if name:  #name里面有没有东西,
     8     print('name不是为空的。。')
     9 else:
    10     print('输入不能为空。。')

    文件操作

            在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

    对文件的操作分三步:

    1、打开文件获取文件的句柄,句柄就理解为这个文件

    2、通过文件句柄操作文件

    3、关闭文件。

    现有file.txt文件

       睡吧 睡吧 我亲爱的宝贝
       妈妈的双手轻轻摇着你
      摇篮摇你 快快安睡
      夜已安静 被里多温暖
      睡吧 睡吧 我亲爱的宝贝
      爸爸的手臂永远保护你
      世上一切 幸福愿望
      一切温暖 全都属于你
      睡吧 睡吧 我亲爱的宝贝
      妈妈爱你 妈妈喜欢你
      一束百合 一束玫瑰
      等你睡醒 妈妈都给你

    读文件

    要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:

     1 f = open('register.txt','r')  #以只读方式打开一个文件,获取文件句柄,如果是读的话,r可以不写,默认就是只读
     2 first_line = f.readline()   #读取文件第一行的内容,返回的是一个字符串
     3 print(first_line)   #打印第一行
     4 print(type(first_line))   #获取第一行返回数据的类型
     5 list = f.readlines()  #读取所有文件内容,返回一个list,元素是每行的数据,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
     6 print(list)
     7 print(type(list))
     8 res = f.read()   #获取除了第一行剩下的所有文件内容
     9 print(res)
    10 f.close()  #关闭文件

    打开文件时,需指定文件路径以及文件以哪种方式打开。

    打开文件的模式有

    r   只读模式:只能读不能写
    w   只写模式:只能写不能读,不存在则创建,存在则删除后再写
    a   追加模式:不可读,不存在则创建,存在则只追加写上去

    "+" 表示可以同时读写某个文件

    r+  【可读、可写;可追加,如果打开的文件不存在的话,会报错】
    w+  【写读模式,使用w+的话,已经存在的文件内容会被清空,可以读到已经写的文件内容,不存在则创建】
    a+   【追加读写模式,不存在则创建;存在则只追加内容;】
    #只要沾上了r,文件不存在的就会报错
    #只要沾上了w,都会清空原来的内容

    文件操作方法:
     1 f = open('geci','r+',encoding='utf-8')
     2 f.readline() #读取文件第一行的内容,返回的是一个字符串
     3 f.read() #获取除了第一行剩下的所有文件内容
     4 f.readlines() #读取所有文件内容,返回一个list,元素是每行的数据,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
     5 f.readable() #判断文件是否可读
     6 f.writable() #判断文件是否可写
     7 # f.encoding() #打印文件编码
     8 f.tell() #获取当前文件指针的指向
     9 f.seek(0)#移动文件指针到最前面
    10 f.write("写入内容")
    11 f.flush()#写入文件后,立即从内存中把数据写到磁盘中
    12 f.truncate()#清空文件内容
    13 f.writelines(["aaaaaa","bbbbbbbbbb"])#将一个列表写入文件
    14 f.close()#关闭文件

    读取大文件时,需要高效的操作方法,例如f.read()和f.readlines()操作文件,会先把文件所有内容读到内存中,这样的话,内存数据一多,非常卡,高效的操作,就是读一行操作一行,读过的内容就从内存中释放了

    1 f = open('file.txt')
    2 for line in f:
    3     print(line)
    4     #line就是每行文件的内容,读完一行的话,就会释放一行的内存

    with使用:

    在操作文件的时候,经常忘了关闭文件,这样的就可以使用with,它会在使用完这个文件句柄之后,自动关闭该文件,使用方式如下:

    1 with open('file.txt','r') as f:
    2     for line in f:
    3         print(line)
    4         
    5 with open('file.txt') as f:
    6     with open('n_file.txt','w') as fn:
    7         for line in f:  #循环file.txt中的每一行
    8             fn.write(line)  #写到n_file文件中

    修改文件:

    修改文件的话,有两种方式,一种是把文件的全部内容都读到内存中,然后把原有的文件内容清空,重新写新的内容;第二种是把修改后的文件内容写到一个新的文件中

    第一种:

    1 with open('file.txt','r+') as f:
    2     res = f.read()
    3     new_res = res.replace('','mememe')
    4     f.write(new_res)

    第二种:

    with open('file.txt') as f:
        with open('n_file.txt','w') as fn: #这个是多文件的操作,打开两个文件,fr是读file.txt,fn是新建一个file_bak文件
            for line in f:
                new_line = line.replace('','me')
                fn.write(new_line)
    1 #把一个列表写到文件中
    2 list = [111,222,333,444]
    3 f = open('file','w')  #打开文件
    4 for line in list:     #循环list
    5     new_line = str(line)   #将list里的元素转换为字符串类型
    6     f.write(new_line+'
    ')  #写入
    1 #从文件读取元素存入列表
    2 f = open('file','r')  #打开文件
    3 list1 = []
    4 for line in f:       #循环读取文件中的每一行
    5     rs = line.rstrip('
    ')  #去除每一行中末尾的换行符
    6     list1.append(rs)        #添加到列表
    7 print(list1)

    有的时候将内容写入文件中后,在文件中看不到写入的内容,这时候需要flush一下,强制将缓冲区中内容写到磁盘上,这样写入文件的内容就能马上查看到了

    1 fw = open('username','w')
    2 fw.write('小崽子')
    3 fw.flush()  #强制把缓冲区里面的数据写到磁盘上

    修改文件内容:

    简单直接的方式     

    1、打开一个文件,获取到他的所有内容
    2、对内容进行修改
    3、清空原来文件的内容
    4、把新的内容写进去
    1 f = open('username','a+')
    2 f.seek(0)   #移动指针到文件最开始
    3 res = f.read()   #读取文件中所有内容
    4 new_res = res.replace('1234','aaaaa')  #将文件中'1234'替换成'aaaaa'
    5 f.seek(0)    #读取完文件中内容后指针移动到文件末尾了,需要再次移动指针到文件最开始
    6 f.truncate()   #清空文件内容
    7 f.write(new_res)   #将修改后的内容写入文件中
    8 f.close()

    打开两个文件

       1、读a文件中内容

       2、修改a文件内容

      3、写入到b文件中

      4、删掉a文件,b文件名字改为a

    1 import os
    2 with open('a',encoding='utf-8') as fr,open('b',encoding='utf-8','w') as fw:
    3     for line in fr:
    4         new_line = line.replace('','flower')
    5         fw.write(new_line)
    6 os.remove('a')
    7 os.rename('b','a')
  • 相关阅读:
    BigDecimal中的8中舍入模式详解
    使用二倍均值法完成红包算法
    使用Calendar类和它的子类GregorianCalendar类实现构建动态日历
    『MelodyHub』书写是对思维的缓存
    本站已接入音乐播放器API
    【LeetCode】35. 搜索插入位置
    配置NodeJs环境变量
    利用GitHub博客连接多仓库
    hexo 大型车祸现场
    随机图片API
  • 原文地址:https://www.cnblogs.com/mululu/p/8695945.html
Copyright © 2020-2023  润新知