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

Tyl*_*emp 23 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",它只会创建一个新文件/截断现有文件.

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

Abh*_*jit 15

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

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

当您指定时exclusive creation,它显然意味着您将使用此模式专门创建文件.这方面的需要在需要的时候,你会不小心截断/追加现有的文件,无论是模式w还是a.

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

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

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

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

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
Run Code Online (Sandbox Code Playgroud)

  • 您应该注意,如果文件的状态在`if`评估和'else`块的执行之间发生变化,那么"以前会..."代码很容易出现竞争条件.这就是"x"被引入的原因,以防止用户代码中的竞争条件. (7认同)

pax*_*blo 6

是的,基本上就是这样。它使用两个标志O_CREAT和调用底层操作系统代码O_EXCL,它尝试以独占方式打开文件,如果当前不存在则创建一个新文件。

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

一个典型的例子是守护进程将他们的进程 ID 写入一个pid文件(以便以后可以轻松地发出信号)。通过使用x,您可以保证一次只能运行一个守护进程,这在没有x模式的情况下很难做到,并且容易出现竞争条件。


Ome*_*gan 6

简单来说,用'x'mode打开文件意味着:

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