Python文件的I/O模式总结

python的open(name[, mode[, buffering]])方法提供了打开文件的功能。打开文件的模式有如下几种:rr+ww+aa+。这几种模式和C语言中fopen()是相同的。 BSD fopen()man page中对这几种模式的定义总结如下。

  1. r:以只读模式打开文件。指针指向文件开头。这是python默认的文件打开模式。
  2. r+:以读写模式打开文件,指针放在文件开头。
  3. w:以写模式打开文件。如果文件已经存在,则覆盖原有文件。如果文件不存在,则新建文件。指针指向文件开头。
  4. w+:以读写模式打开文件。如果文件已经存在,则覆盖原有文件。如果文件不存在,则新建文件。指针指向文件开头。
  5. a:以追加模式打开文件。如果文件已经存在,则从原文件末尾开始追加写入。如果文件不存在,则创建新文件。指针指向文件末尾。注意以此模式打开文件后,即使中间调用了seek()方法,写操作也总是会写在文件末尾。
  6. a+:以读写(追加写入)模式打开文件。如果文件已经存在,则从原文件末尾开始追加写入。如果文件不存在,则创建新文件。注意以此模式打开文件后,即使中间调用了seek()方法,写操作也总是会写在文件末尾。

在这几种方式之外,还有b模式,其意义是打开一个二进制文件。根据python2.7.x document,将b加在上述几种模式之后表示已二进制模式打开文件。所以除上述几种模式之外,还有rb,rb+,wb,wb+,ab,ab+。其区别只是是否以二进制模式打开。但是需要注意的是,只有在Windows平台下python才会区分是textbinary文件。在Windows平台下以二进制模式和以text模式打开文件读写会导致text文件中的行结束符被改变。对于ASCII编码的text文件来说,这一点无关紧要。但对于例如JPEGEXE文件来说,这会导致文件损坏。在Unix平台下,将b加在模式后不会有什么问题。

stackoverflow上的一幅图很好的总结了这几种模式。如下所示:

《Python文件的I/O模式总结》 PythonOpen()mode

模式rr+ww+aa+
++++
+++++
创建++++
覆盖++
指针在开始++++
指针在结尾++

Reference
http://stackoverflow.com/questions/1466000/python-open-built-in-function-difference-between-modes-a-a-w-w-and-r

    原文作者:耀凯考前突击大师
    原文地址: https://www.jianshu.com/p/d298613e3e6c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞