¿Qué hace el nuevo modo de archivo abierto “x” en python 3?
Aquí está el doc. de python 3 :
‘r’: abierto para lectura (predeterminado)
‘w’: abierto para escritura, truncando el archivo primero
‘x’: abierto para creación exclusiva, falla si el archivo ya existe
- Ejecutando scripts de python con subprocess.call usando shebang
- ¿Por qué sklearn preprocesamiento LabelEncoder inverse_transform se aplica desde una sola columna?
- ¿Cómo vuelvo a ejecutar el código en Python?
- ¿Cómo puedo lograr el rendimiento de 50 k / s al insertar mis datos en Cassandra mientras leo la entrada de un archivo csv?
- ¿Cómo agregar un elemento al comienzo de un OrderedDict?
‘a’: abierto para escritura, que se agrega al final del archivo si existe
‘b’: modo binario
‘t’: modo de texto (predeterminado)
‘+’: abre un archivo de disco para actualizar (leer y escribir)
‘U’: modo de líneas nuevas universales (en desuso)
¿Qué significa “creación exclusiva”?
Pruebo el modo “x” y encuentro algunos:
open
open
Entonces, “x” es similar a “w”. Pero para “x”, si el archivo existe, suba FileExistsError . Para “w”, simplemente creará un nuevo archivo / truncará el archivo existente.
Estoy en lo cierto? ¿Es esta la única diferencia?
Como ya lo dijo @Martjin, ya ha respondido su propia pregunta. Solo estaría amplificando la explicación en el manual para entender mejor el texto.
‘x’: abierto para creación exclusiva, falla si el archivo ya existe
Cuando especifique la exclusive creation
, significa claramente que usaría este modo para crear exclusivamente el archivo. La necesidad de esto es necesaria cuando no truncará / agregará accidentalmente un archivo existente con cualquiera de los modos w
o a
.
En ausencia de esto, los desarrolladores deben tener cuidado de verificar la existencia del archivo antes de abrir el archivo para actualizarlo.
Con este modo, su código se escribiría simplemente como
try: with open("fname", "x") as fout: #Work with your open file except FileExistsError: # Your error handling goes here
Anteriormente, aunque su código podría haber sido escrito como
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
Sí, eso es básicamente.
Es útil si puede encontrar dos instancias de su progtwig ejecutándose al mismo tiempo, el uso del modo x
asegurará que solo una creará un archivo con éxito, mientras que la otra falla.
Un ejemplo clásico son los demonios que escriben su ID de proceso en un archivo pid
(para que se pueda señalar fácilmente). Al utilizar x
, puede garantizar que solo se puede ejecutar un daemon a la vez, algo que es más difícil de hacer sin el modo x
, y propenso a las condiciones de carrera.