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


    转自:http://www.nnzhp.cn/article/16/    

    这篇博客来说一下python对文件的操作。

        对文件的操作分三步:

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

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

            3、关闭文件。

        现有以下文件file.txt:    

            寂寞当然有一点
                
            你不在我身边
                
            总是特别想念你的脸
                
            距离是一份考卷
                
            测量相爱的誓言
                
            最后会不会实现
            
            我们为爱还在学
                
            学沟通的语言
                
            学着谅解

            学着不流泪
                
            等到我们学会飞
            
            飞越黑夜和考验
            
            日子就要从孤单里毕业
            
            我们用多一点点的辛苦
                
            来交换多一点点的幸福
                
            就算幸福
            
            还有一段路
                
            等我们学会忍耐和付出
            
            这爱情一定会有张证书
                
            证明
                
            从此不孤独
            
            从此不孤独

        文件基本操作:

            f = open('file.txt','r') #以只读方式打开一个文件,获取文件句柄,如果是读的话,r可以不写,默认就是只读,
            在python2中还有file方法可以打开文件,python3中file方法已经没有了,只有open        
            frist_line = f.readline()#获取文件的第一行内容,返回的是一个list
            print(frist_line)#打印第一行
            res = f.read()#获取除了第一行剩下的所有文件内容
            print(res)
            f.close()#关闭文件

        打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,后面通过此文件句柄对该文件操作,

        打开文件的模式有:

               r,只读模式(默认)。
                w,只写模式。【不可读;不存在则创建;存在则删除内容;】
                a,追加模式。【不可读; 不存在则创建;存在则只追加内容;】

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

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

        "U"表示在读取时,可以将 自动转换成 (与 r 或 r+ 模式同使用)

                rU
                r+U

        "b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

                rb
                wb
                ab

        文件操作方法:

                f = open('file.txt','r+',encoding='utf-8')#encoding参数可以指定文件的编码
                f.readline()#读一行
                f.readable()#判断文件是否可读
                fr.writable()#判断文件是否可写
                fr.encoding#打印文件的编码
                f.read()#读取所有内容,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
                f.readlines()#读取所有文件内容,返回一个list,元素是每行的数据,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
                f.tell()#获取当前文件的指针指向
                f.seek(0)#把当前文件指针指向哪
                f.write('爱情证书')#写入内容
                f.fulsh()#写入文件后,立即从内存中把数据写到磁盘中
                f.truncate()#清空文件内容
                f.writelines(['爱情证书','孙燕姿'])#将一个列表写入文件中
                f.close()关闭文件

    大文件时,读取文件高效的操作方法:

            用上面的read()和readlines()方法操作文件的话,会先把文件所有内容读到内存中,这样的话,内存数据一多,非常卡,高效的操作,就是读一行操作一行,读过的内容就从内存中释放了

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

    with使用:

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

        with open('file.txt','r') as f:#打开一个文件,把这个文件的句柄付给f
              for line in f:
                  print(line)
       with open('file.txt') as fr,with open('file_bak','w') as fw: #这个是多文件的操作,打开两个文件,fr是读file.txt,fw是新建一个file_bak文件
               for line in fr:#循环file.txt中的每一行
                   fw.write(line)#写到file_bak文件中
      

    修改文件:

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

        第一种

        with open('file.txt','r+') as fr:
            res = fr.read()
            new_res = res.replace('我','me')
            fr.write(new_res)

        第二种

       with open('file.txt') as fr,with open('file_new','w') as fw: #这个是多文件的操作,打开两个文件,fr是读file.txt,fw是新建一个file_bak文件
               for line in fr:#循环file.txt中的每一行
                   new_line = line.replace('我','me')
                   fw.write(new_line)#写到file_bak文件中

    集合:

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

        集合的作用:

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

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

        定义集合

            list = [2,3,1,2,3,4]
            s_list = set(list)#这样就定义了一个集合
            set1 = set([1,3,4,5,6])#这种方式和上面的都是把list转换成一个集合
            set2={'hehe','hehe1','hehe3'}#这种方式是直接定义一个集合

        集合操作

            list1 = {1, 2, 3, 4, 5, 6, 9}
            list2 = {2, 3, 4, 6, 1}
            list3 = {1, 2, 3}
            print(list1.intersection(list2))  # 取交集,也就是取list1和list2中都有的
            print(list1 & list2)# 取交集
            print(list1.union(list2))  # 取并集,也就是把list1和list2合并了,然后去除重复的
            print(list1 | list2)# 取并集
            print(list1.difference(list2))  #取差集 在list中存在,在list2中没有的
            print(list1 - list2)
            print(list3.issubset(list1))#判断list3是不是list1的子集
            print(list1.issuperset(list3))#判断list1是不是list3的父集
            print(list1.isdisjoint(list3))#判断list1和list3是否有交集
            print(list1.symmetric_difference(list2))#对称差集,输出两个列表中都没有的值,也就是把两个集合中相同的去掉
            print(list1 ^ list2)
            list1.add(888)#添加元素
            list1.update([777,666,666])
            list1.remove(777)#删除元素,如果元素不存在会报错
            list1.pop()#删除一个随机的元素,并返回删除的元素
            list1.discard('dddd')#如果删除的元素存在,删除,不存在不做处理
  • 相关阅读:
    C字符串处理函数
    C语言字符串函数大全
    那些闪亮的日子
    牛客网在线编程:幸运数
    牛客网在线编程:水仙花数
    [LeetCode]617.Merge Two Binary Trees
    [LeetCode]657.Judge Route Circle
    [LeetCode]141. Linked List Cycle
    五大算法:分治,贪心,动态规划,回溯,分支界定
    [LeetCode]387.First Unique Character in a String
  • 原文地址:https://www.cnblogs.com/xiaojinniu425/p/6041760.html
Copyright © 2020-2023  润新知