python - loads - ¿Cómo leer el archivo de salmuera?
pickle.loads example (3)
El siguiente es un ejemplo de cómo puede escribir y leer un archivo pickle. Tenga en cuenta que si continúa agregando datos de pickle al archivo, deberá continuar leyendo 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()
Creé algunos datos y los almacené varias veces así:
with open(''filename'', ''a'') as f:
pickle.dump(data, f)
Cada vez que el tamaño del archivo aumenta, pero cuando abro el archivo
with open(''filename'', ''rb'') as f:
x = pickle.load(f)
Sólo puedo ver datos de la última vez. ¿Cómo puedo leer correctamente el archivo?
No estás haciendo nada con él, solo estás cargando el archivo.
for line in x:
print x
imprimirá cada línea. (En el segundo con la declaración)
Pickle serializa un solo objeto a la vez y lee un solo objeto: los datos decapados se graban en secuencia en el archivo.
Si simplemente hace pickle.load
, debería leer el primer objeto serializado en el archivo (no el último como ha escrito).
Después de deserializar el primer objeto, el puntero del archivo se encuentra al principio del siguiente objeto; si simplemente llama a pickle.load
nuevamente, leerá el siguiente objeto; haga eso hasta el final del archivo.
objects = []
with (open("myfile", "rb")) as openfile:
while True:
try:
objects.append(pickle.load(openfile))
except EOFError:
break