Я создал некоторые данные и несколько раз сохранил их следующим образом:
with open('filename', 'a') as f:
pickle.dump(data, f)
Каждый раз размер файла увеличивался, но когда я открываю файл
with open('filename', 'rb') as f:
x = pickle.load(f)
Я вижу только данные за последний раз. Как я могу правильно прочитать файл?
open('filename', 'wb')
Ответы:
Pickle сериализует один объект за раз и считывает один объект - обработанные данные последовательно записываются в файл.
Если вы просто это сделаете,
pickle.load
вы должны будете читать первый объект, сериализованный в файл (а не последний, как вы написали).После десериализации первого объекта указатель на файл находится в начале следующего объекта - если вы просто вызовете
pickle.load
снова, он прочитает этот следующий объект - делайте это до конца файла.objects = [] with (open("myfile", "rb")) as openfile: while True: try: objects.append(pickle.load(openfile)) except EOFError: break
источник
В pandas 0.22+ есть функция read_pickle
import pandas as pd object = pd.read_pickle(r'filepath')
источник
Ниже приведен пример того, как вы можете писать и читать файл рассола. Обратите внимание, что если вы продолжаете добавлять данные рассола в файл, вам нужно будет продолжать чтение из файла, пока вы не найдете то, что хотите, или пока не будет сгенерировано исключение при достижении конца файла. Это то, что делает последняя функция.
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()
источник
Я разработал программный инструмент, который открывает (большинство) файлов Pickle прямо в вашем браузере (ничего не передается, поэтому он на 100% конфиденциальный):
https://pickleviewer.com/
источник
Вы ничего с ним не делаете, вы только загружаете файл.
for line in x: print x
напечатает каждую строку. (Во втором с заявлением)
источник