Я хочу загрузить словарь из маринованного файла данных, но проблема в том, что при первой попытке его загрузки маринованный словарь не существует

Я студент GCSE, и у меня возникла проблема, которая требует от меня сохранения имени студента и результатов тестов в файл для последующего поиска и манипулирования.

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

У меня проблема возникает только при первом запуске программы, так как файл данных еще не создан.

Приведенный ниже код открывает существующий файл Dat и записывает последнее имя ученика и оценку в словарь, содержащийся в файле.

f = open("class1.dat","ab+")
class1 = pickle.load(f)
class1[Name]=Score
pickle.dump(class1,f)
f.close

Проблема в том, что это работает, как только первая оценка была сохранена в файле Dat, но я получаю это сообщение об ошибке при первом запуске программы.

Traceback (most recent call last):
  File "C:\Python34\Latest_Version.py", line 61, in <module>
    class1 = pickle.load(f)
EOFError: Ran out of input

Я понимаю, что это потому, что файл данных еще не существует.

Какой код будет проверять, чтобы увидеть, существует ли файл Dat первым?

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

1 ответ

Решение

Причина, по которой это происходит, заключается в том, что у вас нет данных в файле pickle для начала. Вам нужно запустить проверку, чтобы увидеть, есть ли у вас данные для загрузки, чтобы начать с. Таким образом, вы можете бросить свой код в попытке / кроме, чтобы проверить, можете ли вы загрузить данные. Если вы не можете записать исходные данные (пустые данные) в файл рассола.

Кроме того, обратите внимание на явную настройку чтения и записи в файл.

import pickle

class1 = {}
try:
    class1 = pickle.load(open("my_stuff.pkl", "rb"))
    print(class1)
    class1['bob'] = 123
    pickle.dump(class1, open("my_stuff.pkl", "wb"))
except:
    pickle.dump(class1, open("my_stuff.pkl", "wb"))

Итак, здесь происходит то, что вы сначала объявляете пустой словарь, а затем пытаетесь загрузить содержимое. Если это не удастся, он попадет в except, сбросьте пустые данные. Поэтому в следующий раз, когда вы войдете, он будет успешно загружен, вы можете записать свои данные, а затем выбросить рассол.

Другие вопросы по тегам