python3打开“x”模式有什么作用?

时间:2015-03-27 07:46:04

标签: python python-3.x

新的打开文件模式是什么" x"在python 3中做什么?

这是python 3的文档:

  

' r':打开阅读(默认)

     

' w'开放写作,先截断文件

     

' x':打开以进行独占创建,如果文件已存在则失败

     

' a':开放写作,如果文件存在则附加到文件的末尾

     

' b':二进制模式

     

' t':文字模式(默认)

     

' +':打开磁盘文件进行更新(读写)

     

' U':通用换行模式(已弃用)

"独家创作"意思?

我测试" x"模式并找到一些:

  • 不能与" r / w / a"
  • 一起使用
  • " X"只是可写的。 " X +"可以写和读
  • 该文件在open
  • 之前不得存在
  • 该文件将在open
  • 之后创建

所以," x"类似于" w"。但对于" x",如果文件存在,则引发FileExistsError 。对于" w",它只会创建一个新文件/截断现有文件。

我是对的吗?这是唯一的区别吗?

3 个答案:

答案 0 :(得分:14)

正如@Martjin已经说过,你已经回答了自己的问题。我只会放大手册中的解释,以便更好地理解文本

' x':打开以进行独占创建,如果文件已存在则失败

当您指定exclusive creation时,显然意味着您将使用此模式专门创建文件。当您不会使用wa模式中的任何一种模式意外截断/附加现有文件时,需要执行此操作。

如果没有这个,开发人员在跳跃打开文件进行更新之前应该小心检查文件是否存在。

使用此模式,您的代码将简单地写为

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

以前虽然您的代码可能已写为

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

答案 1 :(得分:4)

是的,基本上就是这样。

如果您发现程序的两个实例同时运行会很方便,使用x模式将确保只有一个将成功创建一个文件,而另一个一个失败。

一个典型的示例是将其进程ID写入pid文件的守护进程(因此可以很容易地发出信号)。通过使用x,您可以保证一次只能运行一个守护程序,这在没有x模式的情况下更难做到,而且容易发生竞争条件。

答案 2 :(得分:0)

简单来说,以'x'模式打开文件意味着:

原子 执行:(检查是否存在并创建文件)