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 *