Guardar texto, JSON y CSV en un archivo en Python

Guardar datos en un archivo es una de las tareas de programación más comunes que puede encontrar en su vida como desarrollador. Generalmente, los programas toman alguna entrada y producen s...

Guardar datos en un archivo es una de las tareas de programación más comunes que puede encontrar en su vida como desarrollador.

Generalmente, los programas toman alguna entrada y producen alguna salida. Existen numerosos casos en los que nos gustaría conservar estos resultados. Es posible que nos encontremos guardando datos en un archivo para su posterior procesamiento: desde páginas web que navegamos, volcados simples de datos tabulares que usamos para informes, aprendizaje automático y capacitación o registro durante el tiempo de ejecución de la aplicación, confiamos en que las aplicaciones escriban en archivos en lugar de hacerlo. a mano.

Python nos permite guardar archivos de varios tipos sin tener que utilizar bibliotecas de terceros. En este artículo, nos sumergiremos en guardar los formatos de archivo más comunes en Python.

Abrir y cerrar un archivo

Abrir un archivo

Se puede acceder al contenido de un archivo cuando se abre, y ya no está disponible para leer y escribir después de cerrarlo.

Abrir un archivo es simple en Python:

1
my_data_file = open('data.txt', 'w')

Al abrir un archivo, necesitará el nombre del archivo, una cadena que podría ser una ruta relativa o absoluta. El segundo argumento es el modo, esto determina las acciones que puede realizar con el archivo abierto.

Estos son algunos de los más utilizados:

  • r - (modo predeterminado) abre el archivo para leer
  • w - abre el archivo para escritura, sobrescribiendo el contenido si el archivo ya existe con datos
  • x - crea un nuevo archivo, fallando si existe
  • a - abre el archivo para escribir, agregando nuevos datos al final del contenido del archivo si ya existe
  • b - escribe datos binarios en archivos en lugar de los datos de texto predeterminados
  • + - permite leer y escribir en un modo

Digamos que desea escribir en un archivo y luego leerlo, su modo debería ser 'w+'. Si desea escribir y luego leer de un archivo, sin borrar el contenido anterior, entonces usará 'a+'.

Cerrar un archivo

Cerrar un archivo es aún más fácil en Python:

1
my_data_file.close()

Simplemente necesita llamar al método de cierre en el objeto de archivo. Es importante cerrar el archivo una vez que haya terminado de usarlo, y hay muchas buenas razones para hacerlo:

  • Los archivos abiertos ocupan espacio en la RAM
  • Reduce la posibilidad de corrupción de datos ya que ya no es accesible
  • Hay un límite de archivos que su sistema operativo puede tener abiertos

Para secuencias de comandos pequeñas, estas no son preocupaciones apremiantes, y algunas implementaciones de Python en realidad cerrarán automáticamente los archivos por usted, pero para programas grandes, no deje el cierre de sus archivos al azar y asegúrese de liberar los recursos utilizados.

Usar la palabra clave "with"

Cerrar un archivo puede olvidarse fácilmente, después de todo, somos humanos. Por suerte para nosotros, Python tiene un mecanismo para usar un archivo y cerrarlo automáticamente cuando hayamos terminado.

Para hacer esto, simplemente necesitamos usar la palabra clave with:

1
2
3
with open('data.txt', 'w') as my_data_file:
    # TODO: write data to the file
# After leaving the above block of code, the file is closed

El archivo estará abierto para todo el código que esté sangrado después de usar la palabra clave with, marcada como el comentario # TODO. Una vez que ese bloque de código esté completo, el archivo se cerrará automáticamente.

Esta es la forma recomendada de abrir y escribir en un archivo, ya que no tiene que cerrarlo manualmente para liberar recursos y ofrece un mecanismo a prueba de fallas para concentrarse en los aspectos más importantes de la programación.

Guardar un archivo de texto {#guardar un archivo de texto}

Ahora que conocemos la mejor manera de acceder a un archivo, pasemos directamente a escribir datos.

Afortunadamente, Python también hace esto sencillo:

1
2
3
with open('do_re_mi.txt', 'w') as f:
    f.write('Doe, a deer, a female deer\n')
    f.write('Ray, a drop of golden sun\n')

La función write() toma una cadena y coloca ese contenido en el flujo de archivos. Aunque no lo almacenamos, la función write() devuelve el número de caracteres que acaba de ingresar, es decir, la longitud de la cadena de entrada.

Nota: observe la inclusión del carácter de nueva línea, \n. Se usa para escribir en la siguiente línea del archivo; de lo contrario, todo el texto se agregaría como una sola línea.

Guardar varias líneas a la vez

Con la función write() podemos tomar una cadena y ponerla en un archivo. ¿Qué pasaría si quisiéramos escribir varias líneas a la vez?

Podemos usar la función writelines() para poner datos en una secuencia (como una lista o tupla) y en un archivo:

1
2
3
with open('browsers.txt', 'w') as f:
    web_browsers = ['Firefox\n', 'Chrome\n', 'Edge\n']
    f.writelines(web_browsers)

Como antes, si queremos que los datos aparezcan en líneas nuevas, incluimos el carácter de nueva línea al final de cada cadena.

Si desea omitir el paso de ingresar manualmente el carácter de nueva línea después de cada elemento de la lista, es fácil automatizarlo:

1
2
3
with open('browsers.txt', 'w') as f:
    web_browsers = ['Firefox\n', 'Chrome\n', 'Edge\n']
    f.writelines("%s\n" % line for line in web_browsers)

Nota: La entrada para writelines() debe ser una secuencia plana de cadenas o bytes; no se permiten números, objetos o secuencias anidadas como una lista dentro de una lista.

Si estás interesado en leer más sobre listas y tuplas, ya tenemos un artículo dedicado a ellas - Listas vs Tuplas en Python.

Guardar un archivo CSV

Los archivos CSV (valores separados por comas) se utilizan comúnmente para almacenar datos tabulares. Debido a su popularidad, Python tiene algunos métodos integrados para facilitar la escritura de archivos de ese tipo:

1
2
3
4
5
6
7
8
9
import csv

weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
sales = ['10', '8', '19', '12', '25']

with open('sales.csv', 'w') as csv_file:
    csv_writer = csv.writer(csv_file, delimiter=',')
    csv_writer.writerow(weekdays)
    csv_writer.writerow(sales)

Primero necesitamos importar la biblioteca csv para obtener sus funciones auxiliares. Abrimos el archivo como estamos acostumbrados, pero en lugar de escribir contenido en el objeto csv_file, creamos un nuevo objeto llamado csv_writer.

Este objeto nos proporciona el método writerow() que nos permite poner todos los datos de la fila en el archivo de una sola vez.

Si desea obtener más información sobre el uso de archivos CSV en Python con más detalle, puede leer más aquí: Leer y escribir archivos CSV en Python.

Guardando un archivo JSON

JSON es otro formato popular para almacenar datos y, al igual que con los CSV, Python ha hecho que sea muy sencillo escribir los datos de su diccionario en archivos JSON:

1
2
3
4
5
6
7
8
9
import json

my_details = {
    'name': 'John Doe',
    'age': 29
}

with open('personal.json', 'w') as json_file:
    json.dump(my_details, json_file)

Necesitamos importar la biblioteca json y abrir el archivo. Para escribir realmente los datos en el archivo, simplemente llamamos a la función dump(), dándole nuestro diccionario de datos y el objeto del archivo.

Si desea obtener más información sobre el uso de archivos JSON en Python, puede obtener más información en este artículo: [Leer y escribir JSON en un archivo en Python](/leer-y-escribir-json-en-un-archivo- en-python/).

Conclusión

Guardar archivos puede ser útil en muchos tipos de programas que escribimos. Para escribir un archivo en Python, primero debemos abrir el archivo y asegurarnos de cerrarlo más tarde.

Es mejor usar la palabra clave with para que los archivos se cierren automáticamente cuando terminemos de escribirlos.

Podemos usar el método write() para poner el contenido de una cadena en un archivo o usar writelines() si tenemos una secuencia de texto para poner en el archivo.

Para datos CSV y JSON, podemos usar funciones especiales que proporciona Python para escribir datos en un archivo una vez que el archivo está abierto. to.

Licensed under CC BY-NC-SA 4.0