Escribir archivos usando Python

E

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

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con tus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad