При записи данных в файл значение не изменяется
Выполняю задание из книги «A Byte of Python» и столкнулась со следующей проблемой.
При изменении данных в файле (в методе change_item) не меняется значение данного ключа. При выводе функции read_book печатается словарь без изменений.
Само задание:
Создайте собственную программу «Адресная книга», работающую из командной строки и позволяющую просматривать, добавлять, изменять, удалять или искать контактные данные ваших знакомых.
Создайте класс для хранения персональных данных. Объекты визитных карточек храните в словаре, в котором имена контактов будут служить ключами.
Для длительного хранения этих объектов на жёстком диске воспользуйтесь модулем pickle.
Для добавления, изменения или удаления контактов применяйте встроенные методы словаря.
Код:
import pickle
addressBook = {}
def read_book():
with open('addressbook.pkl', 'rb') as book:
addressBook = pickle.load(book)
for name, number in addressBook.items():
print(name, '-', number)
class Person():
def __init__(self, name, number):
self.name = name
self.number = number
with open('addressbook.pkl', 'wb') as book:
pickle.dump(addressBook, book)
addressBook[name] = number
print('saved')
def change_item(self, name, number):
with open ('addressbook.pkl', 'wb') as book:
pickle.dump(addressBook, book)
addressBook[name] = number
def delete_item(self, name):
with open ('addressbook.pkl', 'rb') as book:
addressBook = pickle.load(book)
if name in addressBook:
del addressBook[name]
with open('addressbook.pkl', 'wb') as book:
pickle.dump(addressBook, book)
def search(self, name):
with open ('addressbook.pkl', 'rb') as book:
addressBook = pickle.load(book)
for i in addressBook:
if i == name:
print(i, addressBook[i])
Ответы (1 шт):
Вы перепутали местами строки в __init__:
def __init__(self, name, number, addressBook):
self.name = name
self.number = number
with open('addressbook.pkl', 'wb') as book:
addressBook[name] = number # сначала меняем "записную книжку"
pickle.dump(addressBook, book) # потом записываем
print('saved')