Leer y escribir listas en un archivo en Python

Introducción

Los programadores de Python utilizan de forma intensiva matrices, listas y diccionarios como estructuras de datos serializados. El almacenamiento persistente de estas estructuras de datos requiere un archivo o una base de datos para funcionar correctamente.

En este artículo, veremos cómo escribir una lista en un archivo y cómo volver a leer esa lista en la memoria.

A escribir datos en un archivo, Y a leer datos de 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 varias líneas. Además, tanto el pickle y del json Los módulos también permiten formas inteligentes de tratar con conjuntos de datos serializados.

Usando el leer() y escribir() Métodos

Para tratar con caracteres (cadenas) lo básico read() y write() los métodos funcionan excelentemente. Guardar una lista de este tipo línea por línea en el archivo listfile.txt se puede hacer de la siguiente manera:


places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.txt', 'w') as filehandle:
    for listitem in places:
        filehandle.write(f'{listitem}n')

El listitem se extiende por un salto de línea "n", en primer lugar, y luego almacenado en el archivo de salida. Ahora podemos echar un vistazo a cómo leer la lista completa del archivo listfile.txt volver a la memoria:


places = []


with open('listfile.txt', 'r') as filehandle:
    for line in filehandle:
        
        curr_place = line[:-1]
        
        places.append(curr_place)

Tenga en cuenta que deberá eliminar el salto de línea del final de la cadena. En este caso, nos ayuda que Python también permita operaciones de lista en cadenas. Esta eliminación se realiza simplemente como una operación de lista en la propia cadena, que conserva todo menos el último elemento. Este elemento contiene el carácter "n" que representa el salto de línea en los sistemas UNIX/Linux.

Usando el líneas de escritura () y readlines () Métodos

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. Escribamos la lista completa en un archivo en el disco:


places_list = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.txt', 'w') as filehandle:
    filehandle.writelines(f"{place for place in places_list}n")

Para leer la lista completa de un archivo en el disco necesitamos:


places = []


with open('listfile.txt', 'r') as filehandle:
    filecontents = filehandle.readlines()
    for line in filecontents:
        
        curr_place = line[:-1]
        
        places.append(curr_place)

El código anterior sigue un enfoque más tradicional tomado de otros lenguajes de programación. Vamos a escribirlo en un más Pitónico camino:


places = []


with open('listfile.txt', 'r') as filehandle:
    places = [current_place.rstrip() for current_place in filehandle.readlines()]

En primer lugar, el contenido del archivo se lee a través de readlines(). En segundo lugar, en un for bucle de cada línea, el carácter de salto de línea se elimina usando el rstrip() método. 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 los programadores principiantes de Python.

Uso del módulo Joblib

Los métodos iniciales explicados hasta ahora almacenan la lista de manera que los humanos aún puedan leerla, literalmente, una lista secuencial en un archivo. Esto es excelente para crear informes simples o generar archivos de exportación para que los usuarios los utilicen más, como archivos CSV. Sin embargo, si su objetivo es simplemente serializar una lista en un archivo, que se puede cargar más tarde, no es necesario almacenarlo en un formato legible por humanos.

El joblib El módulo proporciona la forma más fácil de volcar un objeto de Python (puede ser cualquier objeto en realidad):

import joblib

places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

joblib.dump(places, 'places.sav')

places = joblib.load('places.sav')
print(places) 

joblib sigue siendo la forma más sencilla y limpia de serializar objetos en un formato eficiente y cargarlos más tarde. Puede utilizar cualquier formato arbitrario, como .sav, .data, etc. Realmente no importa, ambos joblib y alternativas como pickle leerá los archivos muy bien.

Usando el conservar en vinagre Módulo

Como alternativa a joblib, nosotros podemos usar pickle! Su dump() El método almacena la lista de manera eficiente como un flujo de datos binarios. En primer lugar, el archivo de salida listfile.data está abierto para escritura binaria ("wb"). En segundo lugar, la lista se almacena en el archivo abierto usando el dump() método:

import pickle

places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.data', 'wb') as filehandle:
    
    pickle.dump(places, filehandle)

Como 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 segundo lugar, la lista de lugares se carga desde el archivo usando el load() método:

import pickle

with open('listfile.data', 'rb') as filehandle:
    
    placesList = pickle.load(filehandle)

Los dos ejemplos aquí demuestran el uso de cadenas. A pesar de que, pickle funciona con todo tipo de objetos de Python, como cadenas, números, estructuras autodefinidas y todas las demás estructuras de datos integradas que proporciona Python.

Uso del formato JSON

El formato de datos binarios pickle uses es específico de Python. Para mejorar la interoperabilidad entre diferentes programas, la notación de objetos de JavaScript (JSON) proporciona un esquema fácil de usar y legible por humanos y, por lo tanto, se volvió muy popular para serializar archivos y compartirlos a través de API.

Consulte nuestra guía práctica y práctica para aprender Git, con las mejores prácticas, los estándares aceptados por la industria y la hoja de trucos incluida. Deja de buscar en Google los comandos de Git y, de hecho, aprenden ella!

El siguiente ejemplo demuestra cómo escribir una lista de tipos de variables mixtas en un archivo de salida usando el json módulo. Habiendo abierto el archivo de salida para escribir, el dump() El método almacena la lista básica en el archivo usando la notación JSON:

import json


basic_list = [1, "Cape Town", 4.6]


with open('listfile.txt', 'w') as filehandle:
    json.dump(basic_list, filehandle)

Volver a leer el contenido del archivo de salida en la memoria es tan simple como escribir los datos. El método correspondiente a dump() es nombrado load():

import json


with open('listfile.txt', 'r') as filehandle:
    basic_list = json.load(filehandle)

Conclusión

Los diferentes métodos que hemos mostrado anteriormente van desde la simple escritura/lectura de datos hasta el volcado/carga de datos a través de flujos binarios usando pickle y JSON. Esto simplifica el almacenamiento persistente de una lista y su lectura en la memoria.

Sello de tiempo:

Mas de Abuso de pila