Escribir en un archivo con la funci贸n print () de Python

    Introducci贸n

    Python print() La funci贸n normalmente se usa para mostrar texto en la l铆nea de comandos o en el int茅rprete interactivo, dependiendo de c贸mo se ejecute el programa Python. Sin embargo, podemos cambiar su comportamiento para escribir texto en un archivo en lugar de en la consola.

    En este art铆culo, examinaremos las muchas formas en que podemos escribir en un archivo con la print() funci贸n.

    Redirigir la salida de un script de Python en la terminal

    La forma r谩pida y sucia de redirigir la salida de un script de Python es directamente desde la l铆nea de comandos mientras se ejecuta el script.

    Por ejemplo, si tuvi茅ramos un archivo de Python llamado hello.py con el siguiente contenido:

    print("Hallo") # Deliberately in German
    

    Podemos redirigir la salida del archivo en el shell usando un solo corchete de 谩ngulo recto:

    $ python3 hello.py > output.txt
    

    Si abrimos nuestro reci茅n creado output.txt, veremos los siguientes contenidos:

    Hallo
    

    Sin embargo, con este m茅todo, toda la salida del script se escribe en un archivo. A menudo, es m谩s flexible realizar esta redirecci贸n desde el propio script de Python.

    Redirigir el flujo de salida est谩ndar

    En Python, el print() La funci贸n es m谩s flexible de lo que piensa. No fue codificado de tal manera que el texto especificado solo se pueda escribir en la pantalla. En su lugar, env铆a texto a una ubicaci贸n denominada flujo de salida est谩ndar, tambi茅n conocida como stdout.

    Todos los sistemas UNIX tienen tres conductos principales: conducto de entrada est谩ndar (stdin), tubo de salida est谩ndar (stdout) y tuber铆a de error est谩ndar (stderr).

    De forma predeterminada, la tuber铆a de salida est谩ndar apunta a la ventana interactiva utilizada para ejecutar el programa, por lo que normalmente vemos texto impreso en la pantalla. Sin embargo, la salida est谩ndar se puede redirigir a otras ubicaciones, como archivos, para mayor comodidad.

    Si la salida est谩ndar se redirige a un archivo espec铆fico, el texto especificado en el print() La funci贸n se escribir谩 en ese archivo en lugar de mostrarse en la pantalla.

    En Python, se puede obtener una referencia a la salida est谩ndar usando el stdout objeto de la sys m贸dulo. Es un objeto similar a un archivo, lo que significa que tiene m茅todos que permiten a Python leer y escribir desde 茅l como un archivo real.

    Veamos un ejemplo donde cambiamos stdout ser un archivo:

    import sys
    
    print('This message will be displayed on the screen.')
    
    original_stdout = sys.stdout # Save a reference to the original standard output
    
    with open('filename.txt', 'w') as f:
        sys.stdout = f # Change the standard output to the file we created.
        print('This message will be written to a file.')
        sys.stdout = original_stdout # Reset the standard output to its original value
    

    los print() La funci贸n toma el argumento de cadena proporcionado, agrega un car谩cter de nueva l铆nea al final y llama al stdout.write() m茅todo para escribirlo en la salida est谩ndar.

    En el ejemplo anterior, primero imprimimos una l铆nea de texto como estamos acostumbrados, que se mostrar谩 en la consola cuando ejecutemos el archivo. Luego reasignamos stdout a nuestro objeto de archivo personalizado – f. Dado que un objeto de archivo tiene un valor perfectamente v谩lido write() m茅todo, nuestro valor impreso se escribe en el archivo sin problemas.

    Tenga en cuenta que es una buena pr谩ctica almacenar el valor original de la salida est谩ndar en una variable antes de cambiarlo. De esta manera, podemos restablecer la salida est谩ndar a su valor original despu茅s de haber terminado, lo que puede ayudar a evitar confusiones.

    Guardemos el c贸digo en un archivo nuevo, printToFile.py. Y luego, ejecut茅moslo:

    $ python3 printToFile.py
    

    Veremos la siguiente salida en la Terminal:

    This message will be displayed on the screen.
    

    Y el script crear谩 un nuevo archivo llamado filename.txt con el siguiente contenido:

    This message will be written to a file.
    

    Redirigi贸 correctamente los datos del flujo de salida est谩ndar a un archivo. Veamos c贸mo podemos hacer esto con otro objeto popular similar a un archivo que se dedica a errores de programaci贸n.

    Redirigir el flujo de errores est谩ndar

    En Python, los errores se escriben en el flujo de errores est谩ndar, tambi茅n conocido como stderr. Esto tambi茅n est谩 predeterminado en la ventana interactiva, pero se puede cambiar a trav茅s de la sys.stderr objeto. Si quisi茅ramos imprimir valores al stderr, simplemente podr铆amos redirigir sys.stdout para apuntar al sys.stderr.

    Crea un archivo llamado printToStderr.py y agregue el siguiente c贸digo:

    import sys
    
    print('This message will be displayed via standard output.')
    
    original_stdout = sys.stdout # Save a reference to the original standard output
    
    sys.stdout = sys.stderr # Redirect the standard output to the standard error.
    print('This message will be displayed via the standard error.')
    
    sys.stdout = original_stdout # Reset the standard output to its original value
    

    Este ejemplo es casi id茅ntico al anterior, excepto que en lugar de redirigir el flujo de salida est谩ndar a un archivo, lo redirigimos al flujo de error est谩ndar. Si el flujo de error est谩ndar tambi茅n se redirigi贸 a otro lugar, la salida se enviar铆a a esa ubicaci贸n en lugar de a la pantalla.

    Ejecutemos este archivo:

    $ python3 printToStderr.py
    

    Nuestra salida mostrar铆a:

    This message will be displayed via standard output.
    This message will be displayed via the standard error.
    

    Si bien puede parecernos una salida normal, para la computadora se muestra a trav茅s de diferentes canales.

    Imprimir utilizando el par谩metro “archivo”

    En los ejemplos anteriores, redirigimos expl铆citamente la salida est谩ndar a otro objeto similar a un archivo cambiando el stdout objeto. Sin embargo, por conveniencia, podemos hacerlo directamente desde el print() funci贸n especificando la ubicaci贸n de salida con el file par谩metro:

    Por ejemplo, si quisi茅ramos imprimir directamente en un archivo sin cambiar el script completo stdout, escribir铆amos:

    import sys
    
    print('This message will be displayed on the screen.')
    
    with open('filename.txt', 'w') as f:
        print('This message will be written to a file.', file=f)
    

    Como no jugamos con la redirecci贸n de la salida est谩ndar expl铆citamente, ya no tenemos que restablecerla a su valor inicial. Como resultado, esta es la forma preferida de escribir en un archivo con la print() funci贸n.

    Nota: Aunque el nombre del par谩metro es file, recuerde que funciona con cualquier objeto similar a un archivo. Si quisieras imprimir en stderr, por ejemplo, cambiar铆a el print() declaraci贸n a:

    print('This message will be written to stderr.', file=sys.stderr)
    

    Conclusi贸n

    En este art铆culo, discutimos la redirecci贸n de Python print() funci贸n de salida utilizando varios m茅todos. Estos m茅todos inclu铆an redirigir la salida de un script Python desde la l铆nea de comandos, redirigir la salida est谩ndar dentro de los scripts Python y especificar un objeto similar a un archivo en file par谩metro directamente en el print() funci贸n.

    Sobre el Autor

    Este art铆culo fue escrito por Ramiro de la Vega, un desarrollador de software y consultor apasionado por ayudar a otros a mejorar sus vidas a trav茅s del c贸digo. Jacob es el autor de la Gu铆a b谩sica de codificaci贸n para desarrolladores, un libro introductorio que cubre conceptos y herramientas de codificaci贸n esenciales. Contiene cap铆tulos sobre arquitectura inform谩tica b谩sica, Internet, l铆nea de comandos, HTML, CSS, JavaScript, Python, Java, bases de datos / SQL, Git y m谩s.

    .

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *