Leer y Escribir listas en un archivo en Python
Como estructuras de datos serializadas, los programadores de Python usan intensivamente matrices, listas y diccionarios. Almacenar estas estructuras de datos de forma persistente requiere un archivo o una base de datos para trabajar. En este artículo se describe cómo escribir una lista en un archivo y cómo volver a leer esa lista en la memoria.
escribir datos en un archivo, y para leer datos desde un archivo, el lenguaje de programación Python ofrece los métodos estándar write()
y read()
para tratar con una sola línea, así como writelines()
y readlines()
para tratar con múltiples líneas. Además, tanto el módulo pickle
como el módulo json
también permiten formas inteligentes de tratar con conjuntos de datos serializados.
Usando los Métodos de lectura y escritura
Para tratar con caracteres (cadenas), los métodos básicos funcionan excelente. Guardar una lista línea por línea en el archivo listfile.txt
se puede hacer de la siguiente manera:
# define list of placesplaces = with open('listfile.txt', 'w') as filehandle: for listitem in places: filehandle.write('%s\n' % listitem)
En la línea 6, listitem
se extiende por un salto de línea «\n», en primer lugar, y se almacena en el archivo de salida, en segundo lugar. Para leer la lista completa del archivo listfile.txt de vuelta a la memoria este código Python muestra cómo funciona:
# define an empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: for line in filehandle: # remove linebreak which is the last character of the string currentPlace = line # add item to the list places.append(currentPlace)
Tenga en cuenta que necesitará eliminar el salto de línea del final de la cadena. En este caso, nos ayuda que Python también permita operaciones de listas en cadenas. En la línea 8 del código anterior, esta eliminación se realiza simplemente como una operación de lista en la cadena misma, que mantiene todo menos el último elemento. Este elemento contiene el carácter «\n » que representa el salto de línea en sistemas UNIX/Linux.
Usando los métodos writelines y readlines
Como se mencionó al principio de este artículo, Python también contiene los dos métodos writelines()
y readlines()
para escribir y leer varias líneas en un solo paso, respectivamente. Para escribir la lista completa en un archivo en disco, el código Python es el siguiente:
# define list of placesplaces_list = with open('listfile.txt', 'w') as filehandle: filehandle.writelines("%s\n" % place for place in places_list)
Para leer la lista completa de un archivo en disco, el código Python es el siguiente:
# define empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: filecontents = filehandle.readlines() for line in filecontents: # remove linebreak which is the last character of the string current_place = line # add item to the list places.append(current_place)
El listado de arriba sigue un enfoque más tradicional tomado de otros lenguajes de programación. Para escribirlo de una manera más pitónica, eche un vistazo al siguiente código:
# define empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: places =
Una vez abierto el archivo listfile.txt
en la línea 5, el restablecimiento de la lista se lleva a cabo completamente en la línea 6. En primer lugar, el contenido del archivo se lee a través de readlines()
. En segundo lugar, en un bucle for
de cada línea, el carácter de salto de línea se elimina utilizando el método rstrip()
. En tercer lugar, la cadena se agrega a la lista de lugares como un nuevo elemento de lista. En comparación con la lista anterior, el código es mucho más compacto, pero puede ser más difícil de leer para programadores principiantes de Python.
Usando el módulo de pepinillos
Los diferentes métodos explicados hasta ahora almacenan la lista de una manera que los humanos aún puedan leerla. En caso de que esto no sea necesario, el módulo de pepinillos puede ser muy útil para usted. Su método dump()
almacena la lista de manera eficiente como un flujo de datos binario. En primer lugar, en la línea 7 (en el código a continuación) se abre el archivo de salida listfile.data
para escritura binaria («wb»). En segundo lugar, en la línea 9
la lista se almacena en el archivo abierto utilizando el método dump()
.
# load additional moduleimport pickle# define a list of placesplacesList = with open('listfile.data', 'wb') as filehandle: # store the data as binary data stream pickle.dump(placesList, filehandle)
Como el siguiente paso leemos la lista del archivo de la siguiente manera. En primer lugar, el archivo de salida listfile.data
se abre binario para lectura («rb») en la línea 4. En segundo lugar, la lista de lugares se carga desde el archivo utilizando el método load()
.
# load additional moduleimport picklewith open('listfile.data', 'rb') as filehandle: # read the data as binary data stream placesList = pickle.load(filehandle)
Los dos ejemplos aquí demuestran el uso de cadenas. Aunque pickle
funciona con todo tipo de objetos Python, como cadenas, números, estructuras autodefinidas y cualquier otra estructura de datos incorporada que proporcione Python.
Usando el formato JSON
El formato de datos binarios pickle
es específico de Python. Para mejorar la interoperabilidad entre diferentes programas, la Notación de Objetos JavaScript (JSON) proporciona un esquema fácil de usar y legible para el ser humano, y por lo tanto se hizo muy popular.
El siguiente ejemplo muestra cómo escribir una lista de tipos de variables mixtas en un archivo de salida utilizando el módulo json. En la línea 4 se define la lista básica. Una vez abierto el archivo de salida para escribir en la línea 7, el método dump()
almacena la lista básica en el archivo utilizando la notación JSON.
import json# define list with valuesbasicList = # open output file for writingwith open('listfile.txt', 'w') as filehandle: json.dump(basicList, filehandle)
La lectura del contenido del archivo de salida en la memoria es tan simple como escribir los datos. El método correspondiente a dump()
se llama load()
, y funciona de la siguiente manera:
import json# open output file for readingwith open('listfile.txt', 'r') as filehandle: basicList = json.load(filehandle)
Conclusión
Los diferentes métodos mostrados anteriormente van desde simples datos de escritura/lectura hasta datos de descarga/carga a través de flujos binarios utilizando pickle y JSON. Esto simplifica el almacenamiento persistente de una lista y su lectura en la memoria.
Agradecimientos
La autora desea agradecer a Zoleka Hatitongwe su apoyo durante la preparación del artículo.