Estoy aprendiendo python y escribí un script que copia el contenido de texto de un archivo a otro.

Aquí está mi código.

from sys import argv
out_file = open(argv[2], 'w').write(open(argv[1]).read())
out_file.close()

Tengo la AttributeError que aparece en el título. ¿Por qué es que wen yo llamo el método de la escritura en open(argv[2], ‘w’) el out_file no se le asigna un tipo de Archivo?

Gracias de antemano

OriginalEl autor Biscuits | 2014-07-26

2 Comentarios

  1. 4

    out_file se asigna el valor de retorno de la write método, que es None. Romper la instrucción en dos:

    out_file = open(argv[2], 'w')
    out_file.write(open(argv[1]).read())
    out_file.close()

    Y realmente, sería preferible hacer esto:

    with open(argv[1]) as in_file, open(argv[2], 'w') as out_file:
        out_file.write(in_file.read())

    Utilizando con with declaración significa Python se cerrará automáticamente in_file y out_file cuando la ejecución sale de la with bloque.

    Gracias por tu respuesta yo originalmente había codificado como tu primer ejemplo, pero yo estaba tratando de hacerlo lo más corto posible. Con la instrucción se ve interesante voy a mirar más en ello.

    OriginalEl autor dano

  2. 2

    out_file está enlazado a la el valor de retorno de write(); devuelve None.

    La expresión open(...).write(...) llama a la write método en el objeto de archivo, pero el archivo abierto objeto se descarta de nuevo después de la expresión completa. Mientras que la expresión sólo se ejecuta la pila se hace referencia a él.

    Desea utilizar el archivo de objeto como un contexto en el administrador de lugar, y va a ser cerrado automáticamente:

    with open(argv[2], 'w') as writefile, open(argv[1]) as readfile:
        writefile.write(readfile.read())

    La with .. as .. declaración también ha obligado sólo abrir archivo de objetos para los nombres, así que usted puede ahora la dirección de los objetos directamente.

    Gracias por tu respuesta. 🙂

    OriginalEl autor Martijn Pieters

Dejar respuesta

Please enter your comment!
Please enter your name here