Escribir archivos usando Python

    Como se señaló en un artículo anterior que trata sobre la lectura de datos de archivos, el manejo de archivos pertenece al conocimiento esencial de todo programador profesional de Python. Esta función es una parte fundamental del lenguaje Python y no es necesario cargar ningún módulo adicional para hacerlo correctamente.

    Conceptos básicos de escritura de archivos en Python

    Los métodos habituales para operar con archivos son open() para abrir un archivo, seek() para establecer la posición actual del archivo en el desplazamiento dado, y close() para cerrar el archivo después. los open() El método devuelve un identificador de archivo que representa un objeto de archivo que se utilizará para acceder al archivo para leerlo, escribirlo o adjuntarlo.

    Escribir en un archivo requiere algunas decisiones: el nombre del archivo en el que se almacenan los datos y el modo de acceso del archivo. Hay dos modos disponibles, escribir en un archivo nuevo (y sobrescribir cualquier dato existente) y agregar datos al final de un archivo que ya existe. Las abreviaturas correspondientes son «w» y «a», y deben especificarse antes de abrir un archivo.

    En este artículo, explicaremos cómo escribir datos en un archivo línea por línea, como una lista de líneas, y cómo agregar datos al final de un archivo.

    Escribir una sola línea en un archivo

    Este primer ejemplo es bastante similar a escribir en archivos con los populares lenguajes de programación C y C ++, como verá en el Listado 1. El proceso es bastante sencillo. Primero, abrimos el archivo usando el open() método de escritura, escriba una sola línea de texto en el archivo utilizando el write() y luego cierre el archivo con el close() método. Tenga en cuenta que debido a la forma en que abrimos el archivo «helloworld.txt», se creará si aún no existe, o se sobrescribirá por completo.

    filehandle = open('helloworld.txt', 'w')
    filehandle.write('Hello, world!n')
    filehandle.close()
    

    Listado 1

    Todo este proceso se puede acortar utilizando el with declaración. El Listado 2 muestra cómo escribir eso. Como ya se dijo antes, tenga en cuenta que al abrir el archivo «helloworld.txt» de esta manera se creará si aún no existe o se sobrescribirá por completo, de lo contrario.

    with open('helloworld.txt', 'w') as filehandle:
        filehandle.write('Hello, world!n')
    

    Listado 2

    Escribir una lista de líneas en un archivo

    En realidad, un archivo no consta solo de una línea, sino de muchos más datos. Por lo tanto, el contenido del archivo se almacena en una lista que representa un búfer de archivo. Para escribir el búfer de archivo completo usaremos el writelines() método. El Listado 3 le da un ejemplo de esto.

    filehandle = open("helloworld.txt", "w")
    filebuffer = ["a first line of text", "a second line of text", "a third line"]
    filehandle.writelines(filebuffer)
    filehandle.close()
    

    Listado 3

    Ejecutando el programa Python que se muestra en el Listado 3 y luego usando el cat comando podemos ver que el archivo «helloworld.txt» tiene el siguiente contenido:

    $ cat helloworld.txt
    a first line of texta second line of texta third line
    

    Listado 4

    Esto sucede porque el writelines() El método no agrega automáticamente ningún separador de línea al escribir los datos. El Listado 5 muestra cómo lograr eso, escribiendo cada línea de texto en una sola línea agregando el separador de línea » n». Usando una expresión generadora, cada línea se sustituye por la línea más el separador de línea. Nuevamente, puede formular esto usando el with declaración.

    with open('helloworld.txt', 'w') as filehandle:
        filebuffer = ["a line of text", "another line of text", "a third line"]
        filehandle.writelines("%sn" % line for line in filebuffer)
    

    Listado 5

    Ahora, el archivo de salida «helloworld.txt» tiene el contenido deseado como se muestra en el Listado 6:

    $ cat helloworld.txt
    a first line of text
    a second line of text
    a third line
    

    Listado 6

    Curiosamente, hay una forma de utilizar la redirección de salida en Python para escribir datos en archivos. El Listado 7 muestra cómo codificar eso para Python 2.x.

    # define the name of the output file
    filename = "helloworld.txt"
    
    # define content
    filecontent = ["Hello, world", "a second line", "and a third line"]
    
    with open(filename, 'w') as filehandle:
        # redirect the output of print to the file handle
        for line in filecontent:
            print >>filehandle, line
    

    Listado 7

    Para las últimas versiones de Python, esto ya no funciona de la misma manera. Para hacer algo como esto debemos usar el sys módulo. Nos permite acceder a los canales de salida estándar de UNIX a través de sys.stdout, sys.stdiny sys.stderr. En nuestro caso conservamos el valor original del canal de salida sys.stdout, primero (línea 8 en el código a continuación), redefínalo en el identificador de nuestro archivo de salida, luego (línea 15), imprime los datos como de costumbre (línea 18) y finalmente restaura el valor original del canal de salida sys.stdout (línea 21). El Listado 8 contiene el código de ejemplo.

    # import sys module
    import sys
    
    # define the name of the output file
    filename = "helloworld.txt"
    
    # preserve the stdout channel
    original = sys.stdout
    
    # define content
    filecontent = ["Hello, world", "a second line", "and a third line"]
    
    with open(filename, 'w') as filehandle:
        # set the new output channel
        sys.stdout = filehandle
         
        for line in filecontent:
            print(line)
         
        # restore the old output channel
        sys.stdout = original
    

    Listado 8

    Esta no es necesariamente la mejor práctica, pero le brinda otras opciones para escribir líneas en un archivo.

    Agregar datos a un archivo

    Hasta ahora, hemos almacenado datos en archivos nuevos o en datos sobrescritos en archivos existentes. Pero, ¿qué pasa si queremos agregar datos al final de un archivo existente? En este caso, necesitaríamos abrir el archivo existente usando un modo de acceso diferente. Cambiamos eso a ‘a’ en lugar de ‘w’. El Listado 9 muestra cómo manejar eso. Y el Listado 10 hace lo mismo, pero usa el with declaración más bien.

    filehandle = open('helloworld.txt','a')
    filehandle.write('n' + 'Hello, world!n')
    filehandle.close()
    

    Listado 9

    with open('helloworld.txt', 'a') as filehandle:
        filehandle.write('n' + 'Hello, world!n')
    

    Listado 10

    Usando el mismo archivo helloworld.txt de antes, ejecutar este código producirá el siguiente contenido del archivo:

    $ cat helloworld.txt
    Hello, world
    a second line
    and a third line
    
    Hello, world!
    

    Conclusión

    Escribir datos de texto sin formato en archivos o agregar datos a archivos existentes es tan fácil como leer archivos en Python. Tan pronto como se cierra un archivo después de escribir o agregar datos, Python activa una llamada de sincronización. Como resultado, el archivo actualizado se escribe inmediatamente en el disco.

    Referencias

     

    Etiquetas:

    Deja una respuesta

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