一、文件操作

r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

  打开文件

  假设我们有一个file.txt文件,内容为:

  1. abcdefg
    jijklmn
    opqtsr
    uvwxyz
  1. # Author:Tim Gu
  2. data = open('file.txt',encoding="utf-8").read()
  3. print(data)

输出:

  1. abcdefg
  2. jijklmn
  3. opqtsr
  4. uvwxyz

  读文件:

  1. # Author:Tim Gu
  2. f = open('file.txt','r',encoding='utf-8')
  3. data = f.read()
  4. print(data)
  5. >>>
  6. abcdefg
  7. jijklmn
  8. opqtsr
  9. uvwxyz

  写文件:

  1. f = open('file.txt2','w',encoding='utf-8') #文件句柄,使用w时事实上是创建了一个新文件,如果源文件存在,会覆盖
  2. f.write("I will go home!")
  3. f.write('\nByeBye!')
  4. f.write('\nadfas')

 

  追加文件:

  

  1. f = open('file.txt2','a',encoding='utf-8') #文件句柄
  2. f.write("See you,tomorrow!")

  打开文件file.txt2

  1. I will go home!
    ByeBye!
    adfasSee you,tomorrow!
  2.  
  3.   以行读取文件:
  1. # Author:Tim Gu
  2. f = open('file.txt2','r',encoding='utf-8') #文件句柄
  3. print(f.readline()) #读取一行
  4. for i in range(2): #使用for循环读取2行
  5. print(f.readline())

  使用readline()读取的是文件的单行,readlines()会读取文件全部行,每行作为一个元素形成一个列表。readlines()因为会一下子把文件全部读取到内存,所以只适合读小文件。

  下面示例读取文件,但不读取第10行:

  1. # Author:Tim Gu
  2. f = open('file3.txt','r',encoding='utf-8') #文件句柄
  3. #print(f.readlines())
  4. for index,line in enumerate(f.readlines()): #使用遍历读取文件
  5. if index == 9:
  6. print('------------------我是分割线-------------------')
  7. continue
  8. print(line.strip())

  输出:

  1. 从前现在过去了再不来
  2. 红红落叶长埋尘土内
  3. 开始终结总是没变改
  4. 天边的你飘泊白云外
  5. 苦海翻起爱恨
  6. 在世间难逃避命运
  7. 相亲竟不可接近
  8. 或我应该相信是缘份
  9. 情人别后永远再不来(消散的情缘)
  10. ------------------我是分割线-------------------
  11. 鲜花虽会凋谢(只愿)
  12. 但会再开(为你)
  13. 一生所爱隐约(守候)
  14. 在白云外(期待)
  15. 苦海翻起爱恨
  16. 在世间难逃避命运
  17. 相亲竟不可接近
  18. 或我应该相信是缘份
  19. 苦海翻起爱恨
  20. 在世间难逃避命运
  21. 相亲竟不可接近
  22. 或我应该相信是缘份

  处理大文件的方法:这行代码的效果和上面的一样,只是使用了迭代器,使得内存可以只保留一行

  1. f = open('file3.txt','r',encoding='utf-8') #文件句柄
  2. count = 0
  3. for line in f: #一行行读取文件,内存中只保留一行。
  4. if count == 9:
  5. print('------------我是分割线---------------')
  6. count += 1
  7. continue
  8. else:
  9. print(line.strip())
  10. count += 1

  光标处理:seek()用法

  1. # Author:Tim Gu
  2. f = open('file3.txt','r',encoding='utf-8') #文件句柄
  3. print(f.tell()) #读取光标坐在位置
  4. print(f.readline()) #读取一行
  5. print(f.readline()) #读取第二行
  6. print(f.readline()) #读取第三行
  7. print(f.tell()) #打印光标所在位置
  8. f.seek(0) #使光标回到原点
  9. print(f.tell()) #打印光标位置
  10. >>>
  11. 0
  12. 从前现在过去了再不来
  13.  
  14. 红红落叶长埋尘土内
  15.  
  16. 开始终结总是没变改
  17.  
  18. 90

  flush()实时将数据写入磁盘

  打印进度条的小方法: 

  1. # Author:Tim Gu
  2. import sys,time
  3. for i in range(20):
  4. sys.stdout.write("#") #sys.stdout方法在同一行打印
  5. sys.stdout.flush() #每打印一个#符号写入一次
  6. time.sleep(0.3) #每打印一次隔0.3秒
  7. >>>
  8. ####################

  

  truncate() 截断文件,可以清空文件

  1. # Author:Tim Gu
  2. f = open('file.txt','a',encoding='utf-8')
  3. f.truncate(10) #保留文件前10个字符,其余截断

  

  文件的模式:r+读写模式:这段代码会先读取3行,然后再在文件最后写入"-------------------------------------"

  1. # Author:Tim Gu
  2. f = open('file.txt','r+',encoding='utf-8') #读写
  3. print(f.readline())
  4. print(f.readline())
  5. print(f.readline())
  6. f.write("----------------------------------------------")
  7. print(f.readline())

  文件的模式:w+ 写读模式:会创建新文件,此段代码会覆盖掉源文件

  1. # Author:Tim Gu
  2. f = open('file.txt','w+',encoding='utf-8') #写读
  3. print(f.readline())
  4. print(f.readline())
  5. print(f.readline())
  6. f.write("----------------------------------------------")
  7. print(f.readline())

  tell()和seek()联合使用:

  1. # Author:Tim Gu
  2. f = open('file.txt','w+',encoding='utf-8') #写读
  3. f.write("-----------------------------1------------------------")
  4. f.write("\n-----------------------------2------------------------")
  5. f.write("\n-----------------------------3------------------------")
  6. f.write("\n-----------------------------4------------------------")
  7. print(f.tell()) #打印光标所在位置
  8. f.seek(10) #使光标回到第十个字符的位置
  9. print(f.readline()) #打印当前行
  10. >>>
  11. 222
  12. -------------------1------------------------

此时文件内容:

  1. -----------------------------1------------------------
  2. -----------------------------2------------------------
  3. -----------------------------3------------------------
  4. -----------------------------4------------------------should be at the begining of the second line

  line.replace的用法,修改文件中的某一行内容:

  1. # Author:Tim Gu
  2. f = open('file3.txt','r',encoding='utf-8')
  3. f_new = open('file3.bak','w',encoding='utf-8')
  4. for line in f:
  5. if '天边的你飘泊白云外' in line:
  6. line = line.replace('天边的你飘泊白云外','aaaaaaaaa') #修改这一行字符串
  7. f_new.write(line)
  8. f.close()
  9. f_new.close()

  使用with打开文件:

  1. with open('file.txt','r',encoding='utf-8') as f,\
  2. open('file3.txt','r',encoding='utf-8') as f2:
  3. for line in f:
  4. print(line)
  5. for line in f2:
  6. print(line)

  注:因实际开发过程中,打开文件很容易忘记关闭文件,造成内存不能释放,所以一般可以选择使用with open方法打开文件

  
  python3的新特性:x

  1. f = open('1.txt','x',encoding='utf-8') #如果文件存在则报错,不存在则创建文件并只写

  文件之ab模式:

  1. f = open('1.txt','ab') #使用ab写文件
  2. f.write(bytes('顾卿',encoding='utf-8')) #因为有b,所以必须传字节类型,所以使用bytes把字符串转化为字节类型
  3. f.close()

  seek()和tell()的特性:
模式r+一般比较常用,相比较a+,r+可控制指针位置来写,而a+则永远只能在末尾写 

  1. f = open('1.txt','r+',encoding='utf-8') #打开模式是r+(无b),读取按照字符读取
  2. data = f.read(1)
  3. print(f.tell()) #tell当前指针所在的位置(字节)
  4. f.seek(f.tell()) #调整当前指针的位置(字节)
  5. f.write('') #当前位置开始覆盖
  6. f.close()

  

  flush()的作用:

  1. f = open('1.txt','a',encoding='utf-8')
  2. f.write('')
  3. f.flush() #将缓存内容强制写进磁盘
  4. input('asdfasd')

  seekable():
是否可以移动指针

打开两个文件,将第一个文件的内容写进第二个文件:

  

  1. with open('1.txt','r',encoding='utf-8') as f1,open('2.txt','w',encoding='utf-8') as f2:
  2. times = 0
  3. for line in f1:
  4. times += 1
  5. if times <= 10:
  6. f2.write(line)
  7. else:
  8. break
  9.  
  10. 读取第一个文件内容,修改后写入第二个文件:
  11. with open('1.txt','r',encoding='utf-8') as f1,open('2.txt','w',encoding='utf-8') as f2:
  12. times = 0
  13. for line in f1:
  14. new_str = line.replace('aaaaa','st')
  15. f2.write(new_str)

Python----文件的IO操作的更多相关文章

  1. 人生苦短之Python文件的IO操作

    在Python中也有涉及到文件的相关操作,从最简单的文件读取说起 文件读取 file = open('/Users/macbookpro/Desktop/使用教程.txt', 'r', encodin ...

  2. Atitit.跨语言  文件夹与文件的io操作集合  草案

    Atitit.跨语言  文件夹与文件的io操作集合  草案 1. Jdk原生的太难用了..1 2. PS: apache commons-io包,FileUtils有相关的方法,IOUtils一般是拷 ...

  3. 提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)

    复制.移动.删除.比较.监控.文件读写 等文件和IO操作是编程中比较常用的功能.        幸运的是,Apache Commons IO等开源组件已经帮我们实现了.        我们可以不用重复 ...

  4. python文件及目录操作

    python文件及目录操作 读/写文件 新建/打开文件 写入 #举个例子,打开D:\test\data.txt #以写入模式打开文件 #如果test(上级目录)不存在则报错 #如果data.txt(文 ...

  5. python文件的基础操作

    import os print(,'-')) print(os.getcwd()) print(,'-')) print(os.listdir()) print(,'-')) print(os.lis ...

  6. python中的IO操作

    python中的基本IO操作: 1) 键盘输入函数:raw_input(string),不作处理的显示,与返回. input(string),可以接受一个python表达式作为返回,python内部得 ...

  7. [ Python ] 文件的读写操作

    1. 文件读写操作 读写文件是最常见的 IO 操作, Python 内置了读写文件的函数.在磁盘上读写文件的功能是由操作系统提供的,所以读写文件是请求操作系统打开一个文件对象(通常称为文件描述符),然 ...

  8. [Python基础]006.IO操作

    IO操作 输入输出 print raw_input input 文件 打开文件 关闭文件 读文件 写文件 文件指针 实例 输入输出 输入输出方法都是Python的内建函数,并且不需要导入任何的包就可以 ...

  9. Linux文件的IO操作 一

    系统调用 系统调用: 操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务 为什么用户程序不能直接访问系统内核提供的服务 为了更好地保护内核空间, ...

  10. Python学习之-- IO 操作

    阻塞IO / 非阻塞IO /IO多路复用 / 异步IO 说明:同步IO包含(阻塞IO / 非阻塞IO /IO多路复用),因为他们有个共同特性就是都需要内核态到用户态的一个等待. 基本概念解释,环境限定 ...

随机推荐

  1. openssh6.7.deb download packed for debian7/ubuntu12.04 amd64

    openssh the openssh-server on debian7/ubuntu12.04 is too old and out of date. so now we replace and ...

  2. mmap学习

    mmap学习 内存页: Linux是以页为单位来管理物理内存的,一页大小一般等于4096字节.页容量越大,系统中可能存在的内存碎片就越多. mmap将一个磁盘上的文件或者对象映射进内存.文件被映射到多 ...

  3. android自定义View---生成虚线的View

    1.在res/values/目录下 新建文件 attrs.xml <?  xml   version =  "1.0"   encoding =  "utf-8&q ...

  4. 设置,获取和删除Cookies

    #region 保存用户名的Cookie /// <summary> /// 设置Cookie /// </summary> /// <param name=" ...

  5. All about Performing User-Managed Database Recovery

    Automatic Recovery with SET AUTORECOVERY ======================================== Issuing SET AUTORE ...

  6. Oracle层次查询和with函数的使用

    开发中大家应该都做过什么类似部门管理这样的功能,一般情况下一个部门下面还有下一级部门(子部门),这个层级就类似一棵树.这种情况下一般会把父级部门和子级部门分成2个或者多个表,这种算是比较常规的做法:有 ...

  7. .NET基础——运算符

    这一篇我们来讲解C#中的运算符 1. C#中的算术运算符 5个算数运算符:+  -  *  /  %     它们都是二元运算符,*  /  % 的运算优先级相同,并且高于 +  - ,+  - 的运 ...

  8. RocketMQ源码 — 一、 quikstart

    RocketMQ quikstart 获取源码 git clone https://github.com/alibaba/RocketMQ.git 编译打包 cd RocketMQ bash inst ...

  9. 一个简单的使用restc demo

    最近不经意间看到饿了么团队开发的restc,接口调试工具(类似postman),其实调试接口都没用过工具,每次都只是运行起项目直接调接口.闲来无事,看到restc,就决定试试,后面觉得挺不错的,就分享 ...

  10. jquery中当CheckBoxList被选中时提示

    $(function(){ $('input:checkbox').on('change', function(){ //当复选框选中时出现提示 if($('input:checkbox:checke ...