Leer y escribir listas en un archivo en Python

    Como estructuras de datos serializadas, los programadores de Python utilizan de forma intensiva matrices, listas y diccionarios. El almacenamiento persistente de estas estructuras de datos requiere un archivo o una base de datos para trabajar. Este art铆culo describe c贸mo escribir una lista en un archivo y c贸mo volver a leer esa lista en la memoria.

    Para escribir datos en un archivo y 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 el json El m贸dulo tambi茅n permite formas inteligentes de tratar con conjuntos de datos serializados.

    Usar los m茅todos de lectura y escritura

    Para tratar con caracteres (cadenas), los m茅todos b谩sicos funcionan excelentemente. Guardar tal lista l铆nea por l铆nea en el archivo listfile.txt se puede hacer de la siguiente manera:

    # define list of places
    places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']
    
    with open('listfile.txt', 'w') as filehandle:
        for listitem in places:
            filehandle.write('%sn' % listitem)
    

    En la l铆nea 6 el listitem se ampl铆a con un salto de l铆nea ” n”, en primer lugar, y en segundo lugar se almacena en el archivo de salida. Para volver a leer la lista completa del archivo listfile.txt en la memoria, este c贸digo de Python le muestra c贸mo funciona:

    # define an empty list
    places = []
    
    # open file and read the content in a list
    with open('listfile.txt', 'r') as filehandle:
        for line in filehandle:
            # remove linebreak which is the last character of the string
            currentPlace = line[:-1]
    
            # add item to the list
            places.append(currentPlace)
    

    Tenga en cuenta que deber谩 eliminar el salto de l铆nea del final de la String. En este caso, nos ayuda que Python tambi茅n permita operaciones de lista 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 en s铆, que conserva todo menos el 煤ltimo elemento. Este elemento contiene el car谩cter ” n” que representa el salto de l铆nea en sistemas UNIX / Linux.

    Uso de los m茅todos de l铆neas de escritura y l铆neas de lectura

    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 el disco, el c贸digo Python es el siguiente:

    # define list of places
    places_list = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']
    
    with open('listfile.txt', 'w') as filehandle:
        filehandle.writelines("%sn" % place for place in places_list)
    

    Para leer la lista completa de un archivo en el disco, el c贸digo Python es el siguiente:

    # define empty list
    places = []
    
    # open file and read the content in a list
    with 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[:-1]
    
            # add item to the list
            places.append(current_place)
    

    La lista anterior sigue un enfoque m谩s tradicional tomado de otros lenguajes de programaci贸n. Para escribirlo de una manera m谩s pythonica, eche un vistazo al c贸digo a continuaci贸n:

    # define empty list
    places = []
    
    # open file and read the content in a list
    with open('listfile.txt', 'r') as filehandle:
        places = [current_place.rstrip() for current_place in filehandle.readlines()]
    

    Habiendo abierto el archivo listfile.txt en la l铆nea 5, el restablecimiento de la lista se realiza por completo en la l铆nea 6. 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 utilizando el rstrip()m茅todo. En tercer lugar, la cadena se agrega a la lista de lugares como un nuevo elemento de la 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.

    Usando el m贸dulo de pepinillos

    Los diferentes m茅todos explicados hasta ahora almacenan la lista de forma que los humanos a煤n puedan leerla. En caso de que esto no sea necesario, pepinillo El m贸dulo puede resultarle bastante 煤til. Sus dump() El m茅todo almacena la lista de manera eficiente como un flujo de datos binarios. En primer lugar, en la l铆nea 7 (en el c贸digo siguiente) el archivo de salida listfile.data se abre para escritura binaria (“wb”). En segundo lugar, en la l铆nea 9
    la lista se almacena en el archivo abierto usando el dump() m茅todo.

    # load additional module
    import pickle
    
    # define a list of places
    placesList = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']
    
    with open('listfile.data', 'wb') as filehandle:
        # store the data as binary data stream
        pickle.dump(placesList, 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 la l铆nea 4. En segundo lugar, la lista de lugares se carga desde el archivo usando el load() m茅todo.

    # load additional module
    import pickle
    
    with 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. A pesar de que, pickle funciona con todo tipo de objetos de Python, como cadenas, n煤meros, estructuras autodefinidas y cualquier otra estructura de datos incorporada que proporciona Python.

    Usando el formato JSON

    El formato de datos binarios pickle utiliza 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 por humanos, por lo que se hizo muy popular.

    El siguiente ejemplo demuestra c贸mo escribir una lista de tipos de variables mixtas en un archivo de salida usando el json m贸dulo. En la l铆nea 4 se define la lista b谩sica. Habiendo abierto el archivo de salida para escribir en la l铆nea 7, el dump() El m茅todo almacena la lista b谩sica en el archivo usando la notaci贸n JSON.

    import json
    
    # define list with values
    basicList = [1, "Cape Town", 4.6]
    
    # open output file for writing
    with open('listfile.txt', 'w') as filehandle:
        json.dump(basicList, filehandle)
    

    Leer el contenido del archivo de salida de nuevo en la memoria es tan simple como escribir los datos. El m茅todo correspondiente a dump() es nombrado load(), y funciona de la siguiente manera:

    import json
    
    # open output file for reading
    with open('listfile.txt', 'r') as filehandle:
        basicList = json.load(filehandle)
    

    Conclusi贸n

    Los diferentes m茅todos que se muestran arriba 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 almacenar una lista de forma persistente y volver a leerla en la memoria.

    Etiquetas:

    Deja una respuesta

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