Как подсчитать количество списков в двоичном файле с помощью python?

#python #python-3.x

Вопрос:

Я хотел подсчитать количество списков в моем двоичном файле для проекта, который я сделал, чтобы я мог распечатать свои ранее сохраненные данные, но я получил ошибку EOF. Можете ли вы сказать мне, почему?

 import pickle
F=open('binary_file_1.dat','rb')
while True:
    List=pickle.load(F)
    l=l 1
F.close()
print('l=',l)
 

Выход:

 Traceback (most recent call last):
  File "C:UsersJonasDesktopprogram_x.py", line 7, in <module>List=pickle.load(F)
EOFError: Ran out of input
 

Открыт для всех предложений. Спасибо вам, читатели

Комментарии:

1. Если сериализованный объект является классом Python, вы можете самоанализироваться , чтобы определить, какие типы атрибутов содержатся в нем

2. Извини, что я тебя не понял. О, на самом деле мне дали список списков, так что мне не нужно выяснять тип данных, но спасибо. Если вы знаете ответ, пожалуйста, дайте мне знать

3. Можете ли вы показать, как выглядит объект, который вы сериализовали (замариновали). Был ли это один класс?

4. Я также ,наконец,придумал способ,мой список выглядел так [Молоко,2, 100, 40], в котором указаны название товара, скидка и другие связанные номера. Итак, для подсчета таких списков я сделал этот код count=1 F=open('binary_file_1.dat','rb') Y=F.readlines() for x in Y: z=len(x) for q in range(z-1): if x[q:q 1]==b'.': count=count 1 F.close() , Спасибо за вашу заботу

Ответ №1:

Не используйте pickle.load() в цикле for. При загрузке маринованного файла вы получаете тот же объект , с которым вы сохранили pickle.dump() , поэтому, если вашим объектом был, например, список списков, вы могли бы использовать len(pickle.load(f)) для получения количества списков или что-то подобное в зависимости от типа объекта.

Комментарии:

1. Так что извините, но я думаю, что вы меня неправильно поняли, на самом деле я хотел посчитать количество списков, а не количество элементов списка. Можете ли вы решить мою проблему сейчас

2. Даже курсор не выходит из цикла while, если в python он равен false.3-x, он просто показывает ошибку EOF