Crear un archivo si no existe, de lo contrario no hacer nada

Amir A. Shabani:

Tengo un script que voy a ejecutar varias veces , y la primera línea en la función principal de este guión es algo como esto:

def main():
    users_csv_file_init()

Lo que esta función debe hacer es crear un archivo CSV y anexar los nombres de las columnas, si no existe tal archivo, y si lo hace, no debe hacer nada. Lo que escribí fue la siguiente:

def users_csv_file_init():
    with open("users.csv", 'a+') as output_file:
        writer = csv.writer(output_file)
        writer.writerow(["userid", "username", "fname", "lname", "uuid"])

Esto no funciona, ya que crea una nueva fila (los nombres de las columnas) cada vez que ejecute la secuencia de comandos, y tiene sentido, ya que a+crea el archivo si no existe y abrirlo en modalidad de apertura. Pero no puedo cambiar a w+cualquiera, ya que elimina todo lo que estaba previamente en el archivo. Y a partir de los modos de open(), única w+y a+parecen crear el archivo si no existe.

Pude comprobar manualmente si existe el archivo, así:

def users_csv_file_init():
    if not os.path.exists("users.csv"):
        with open("users.csv", 'w') as output_file:
            writer = csv.writer(output_file)
            writer.writerow(["userid", "username", "fname", "lname", "uuid"])

Pero me han dicho que es unpythonic y propenso a las condiciones de carrera a hacerlo de esta manera. ¿Cómo puedo hacerlo correctamente?

cómo:

Usted puede simplemente coger el FileExistsErrore intente abrir el archivo con el modo de creación exclusiva.

abrir para la creación exclusiva, en su defecto si el archivo ya existe

def users_csv_file_init():
    try:
        with open("users.csv", 'x') as output_file:
            writer = csv.writer(output_file)
            writer.writerow(["userid", "username", "fname", "lname", "uuid"])
    except FileExistsError:
        pass

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=280964&siteId=1
Recomendado
Clasificación