pickle.load не читает полностью все данные из файла. как решить проблему?

Всем привет.

Я хочу в условный лог записать данные, а потом из лога получить все записи (и при необходимости отфильтровать их). Код такой у меня:

import pickle
import os


class OwnLogger():
    def __init__(self, log_dir="log/"):
        self.log_dir = log_dir
        if not os.path.exists(self.log_dir):
            os.makedirs(self.log_dir)
        self.file_name = os.path.join(self.log_dir + "log.pkl")

    def log(self, message, level):
        # Библиотека pickle позволяет класть и доставать объекты в файл
        self.message = message
        self.level = level

        data = {
            'message': self.message,
            'level': self.level
        }

        with open(self.file_name, 'ab') as file:
            pickle.dump(data, file)

    def show_last(self, level):
        with open(self.file_name, 'rb') as file:
            sets = pickle.load(file)

        # for key, value in sets.items():
        #     print(key, value)
        print(sets)
        # return sets


logger = OwnLogger()
logger.log("System started", "info")
logger.show_last("error")
# => None
# Некоторые интерпретаторы Python могут не выводить None, тогда в этой проверке у вас будет пустая строка
logger.log("Connection instable", "warning")
logger.log("Connection lost", "error")

# logger.show_last()
# => Connection lost
# logger.show_last("info")
# => System started

Вызывая метод класса и передавая туда нужный мне текст и уровень ошибки, все ок - файл дописывается новыми строчками. Но когда я вызываю через pickle.load, то вызывается только первая строчка по ходу.

введите сюда описание изображения

А мне нужно, чтобы вызвались все строчки. Подскажите, как исправить код?


Ответы (0 шт):