Saltar al contenido

¿Cómo leer el archivo pickle?

Solución:

Pickle serializa un solo objeto a la vez y vuelve a leer un solo objeto: los datos decapados se registran en secuencia en el archivo.

Si simplemente lo haces pickle.load debería estar leyendo el primer objeto serializado en el archivo (no el último como lo ha escrito).

Después de anular la serialización del primer objeto, el puntero de archivo está al principio del siguiente objeto, si simplemente llama pickle.load de nuevo, leerá el siguiente objeto; hágalo hasta el final del archivo.

objects = []
with (open("myfile", "rb")) as openfile:
    while True:
        try:
            objects.append(pickle.load(openfile))
        except EOFError:
            break

Hay un read_pickle funcionan como parte de los pandas 0.22+

import pandas as pd

object = pd.read_pickle(r'filepath')

El siguiente es un ejemplo de cómo puede escribir y leer un archivo pickle. Tenga en cuenta que si sigue agregando datos de pickle al archivo, deberá continuar leyendo desde el archivo hasta que encuentre lo que desea o se genere una excepción al llegar al final del archivo. Eso es lo que hace la última función.

import os
import pickle


PICKLE_FILE = 'pickle.dat'


def main():
    # append data to the pickle file
    add_to_pickle(PICKLE_FILE, 123)
    add_to_pickle(PICKLE_FILE, 'Hello')
    add_to_pickle(PICKLE_FILE, None)
    add_to_pickle(PICKLE_FILE, b'World')
    add_to_pickle(PICKLE_FILE, 456.789)
    # load & show all stored objects
    for item in read_from_pickle(PICKLE_FILE):
        print(repr(item))
    os.remove(PICKLE_FILE)


def add_to_pickle(path, item):
    with open(path, 'ab') as file:
        pickle.dump(item, file, pickle.HIGHEST_PROTOCOL)


def read_from_pickle(path):
    with open(path, 'rb') as file:
        try:
            while True:
                yield pickle.load(file)
        except EOFError:
            pass


if __name__ == '__main__':
    main()
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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