转自: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 \n \r\n自动转换成 \n (与 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')#如果删除的元素存在,删除,不存在不做处理

python学习笔记:文件操作和集合(转)的更多相关文章

  1. 03 python学习笔记-文件操作(三)

    本文内容主要包括以下方面: 1. 文件操作基本认识2. 只读(r, rb)3. 只写(w, wb)4. 追加(a, ab)5. r+读写6. w+写读7. a+写读(追加写读)8. 文件的修改 一.文 ...

  2. Python学习笔记——文件操作

    python中,一切皆对象.   一.文件操作流程 (1)打开文件,得到一个文件句柄(对象),赋给一个对象: (2)通过文件句柄对文件进行操作: (3)关闭文件. 文件对象f通过open()函数来创建 ...

  3. [Python学习笔记]文件的读取写入

    文件与文件路径 路径合成 os.path.join() 在Windows上,路径中以倒斜杠作为文件夹之间的分隔符,Linux或OS X中则是正斜杠.如果想要程序正确运行于所有操作系统上,就必须要处理这 ...

  4. python基础学习笔记——文件操作

    文件操作 初始文件操作 使用Python来读写文件是非常简单的操作,我们使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了 根据打开方式的不同能够执行的操作 ...

  5. python学习总结---文件操作

    # 文件操作 ### 目录管理(os) - 示例 ```python # 执行系统命令 # 清屏 # os.system('cls') # 调出计算器 # os.system('calc') # 查看 ...

  6. Python学习笔记四--字典与集合

    字典是Python中唯一的映射类型.所谓映射即指该数据类型包含哈希值(key)和与之对应的值(value)的序列.字典是可变类型.字典中的数据是无序排列的. 4.1.1字典的创建及赋值 dict1={ ...

  7. python学习日记(文件操作)

    文件操作概述 计算机系统分为:操作系统,计算机硬件,应用程序. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序 ...

  8. erlang学习笔记(文件操作)

    参考这里和这里了解到的文件操作的模块有很多:kernel下有:file,stdlib下有:filelib,filename,file_sorter.(具体查看官方文档)

  9. python学习day8 文件操作(深度学习)

    文件操作 (day7内容扩展) 1 文件基本操作 obj = open('路径',mode='模式',encoding='编码')obj.write()obj.read()obj.close() 2 ...

随机推荐

  1. IOS照片框架

    介绍 每天,用 iPhone 拍摄的照片数量超过了任何相机.每年 iOS 设备上的显示效果变得越来越好,回到 iPad 刚出现还没有 Retina 显示屏的时代,大屏幕的杀手级功能之一就是可以展示用户 ...

  2. vs2012 vs2010 opencv2.4.7配置

    http://blog.csdn.net/xiaohanstu/article/details/45309149?utm_source=tuicool <pre name=.7配置 .配置 () ...

  3. 复健小CM

    系统 : Windows xp 程序 : Keygenme # 2 程序下载地址 :http://pan.baidu.com/s/1qYIk2HQ 要求 : 注册机编写 使用工具 : OD 可在“PE ...

  4. LInux内核分析——计算机是如何工作的进行

    万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 " 实 ...

  5. ThreadPoolExecutor机制探索-我们到底能走多远系列(41)

    我们到底能走多远系列(41) 扯淡: 这一年过的不匆忙,也颇多感受,成长的路上难免弯路,这个世界上没人关心你有没有变强,只有自己时刻提醒自己,不要忘记最初出发的原因. 其实这个世界上比我们聪明的人无数 ...

  6. 552 you must authentication

    配置邮箱到outlook时 出现以下错误: 发送测试电子邮件消息: 无法发送此邮件.请在帐户属性中验证电子邮件地址.  响应服务器: 552 you must authentication 需要在”其 ...

  7. 动态添加Marquee标签,并动态赋值与属性

    前台加载js $(function(){ var publishStr="<%=publishText%>" var marqueeStr=" <mar ...

  8. js事件处理机制

    一.事件处理程序 a.     DOM0级事件处理程序,被认为是元素的方法. var btn=document.getElementById('myBtn'); btn.onclick=functio ...

  9. Dockerfile指令

    指令的一般格式为INSTRUCTION arguments,指令包括FROM.MAINTAINER.RUN等. FROM 格式为FROM <image>或FROM <image> ...

  10. HOG matlab练习

    matlab练习程序(HOG方向梯度直方图) HOG(Histogram of Oriented Gradient)方向梯度直方图,主要用来提取图像特征,最常用的是结合svm进行行人检测. 算法流程图 ...