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上的一幅图很好的总结了这几种模式。如下所示:

PythonOpen()mode
模式 r r+ w w+ a a+
+ + + +
+ + + + +
创建 + + + +
覆盖 + +
指针在开始 + + + +
指针在结尾 + +

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容