文件模式

你可以使用 mode 参数指定的不同模式打开文件。这些包括:

  • 'r' - 阅读模式。默认值。它只允许你读取文件,而不是修改它。使用此模式时,文件必须存在。

  • 'w' - 写作模式。如果它不存在,它将创建一个新文件,否则将删除该文件并允许你写入该文件。

  • 'a' - 追加模式。它会将数据写入文件末尾。它不会删除文件,并且该模式必须存在该文件。

  • 'rb' - 二进制读取模式。这与 r 类似,不同之处在于以二进制模式强制读取。这也是默认选择。

  • 'r+' - 同时读取模式和写入模式。这使你可以同时读取和写入文件,而无需使用 rw

  • 'rb+' - 二进制读写模式。与 r+相同,但数据是二进制的

  • 'wb' - 二进制写入模式。与 w 相同,但数据是二进制的。

  • 'w+' - 写作和阅读模式。与 r+完全相同,但如果文件不存在,则创建一个新文件。否则,文件将被覆盖。

  • 'wb+' - 二进制模式下的写入和读取模式。与 w+相同,但数据是二进制的。

  • 'ab' - 以二进制模式附加。与 a 类似,不同之处在于数据是二进制的。

  • 'a+' - 追加和阅读模式。与 w+类似,因为如果文件不存在,它将创建一个新文件。否则,文件指针位于文件的末尾(如果存在)。

  • 'ab+' - 二进制的附加和读取模式。与 a+相同,只是数据是二进制的。

     with open(filename, 'r') as f:
         f.read()
     with open(filename, 'w') as f:
         f.write(filedata)
     with open(filename, 'a') as f:
         f.write('\n' + newdata)
    
[R R + w ^ W + 一个 A +
创建文件
删除文件
初始位置 开始 开始 开始 开始 结束 结束

Python 3 为 exclusive creation 添加了一个新模式,这样你就不会意外地截断或覆盖现有文件。

  • 'x' - 开放独家创作,如果文件已经存在,将提升 FileExistsError
  • 'xb' - 打开二进制独占创建写入模式。与 x 相同,但数据是二进制的。
  • 'x+' - 阅读和写作模式。与 w+类似,因为如果文件不存在,它将创建一个新文件。否则,将提升 FileExistsError
  • 'xb+' - 写作和阅读模式。与 x+完全相同,但数据是二进制的
X X +
创建文件
删除文件
初始位置 开始 开始

允许一个人以更加 pythonic 的方式编写文件打开代码:

Python 3.x >= 3.3

try:
    with open("fname", "r") as fout:
        # Work with your open file
except FileExistsError:
    # Your error handling goes here

在 Python 2 中你会做类似的事情

Python 2.x >= 2.0

import os.path
if os.path.isfile(fname):
    with open("fname", "w") as fout:
        # Work with your open file
else:
    # Your error handling goes here