2012-01-08 2 views
0

Привет, я новичок в python an di, недавно создал телефонную книгу, используя функцию словаря, а затем переключился на exe с помощью py2exe. Я столкнулся с проблемой, теперь я ввожу имена в телефонную книгу, а затем, когда я выхожу из программы и возвращаю назад, все числа ушли. SO есть ли способ сохранить имена и числа, введенные в программу? Пожалуйста, дайте мне код, как я делаю это для своего класса, и они будут сумасшедшими, если числа исчезнут каждый раз, когда они выйдут из телефонной книги! ПОЖАЛУЙСТА ПОМОГИ!Телефонная книга python

+0

Google 'питон persistence' .. . –

+0

Задайте себе: как обычные приложения сохраняют введенные данные? – MatthewD

+0

Как говорит Феликс, вам нужно «Google it up» и запрограммировать его самостоятельно, просто невозможно создать общий «сохранить и загрузить что-либо» без каких-либо подробностей о том, как вам нужно работать. –

ответ

2

Если вы еще не хотите изучать реляционные базы данных, NoSQL или облачные решения, вы можете начать с использования shelve module.

+0

мммм. Можете ли вы, ребята, указать еще немного по-прежнему сомневающимся, если возможно, предоставить более простой учебник или предоставить код? –

0

Ну, основная проблема заключается в том, что вы храните новые значения в своей базе данных, которая в этом случае представлена ​​dict, но вы не сохраняете ее состояние между выполнением сценариев. Время существования объекта в вашем скрипте - пока скрипт запущен интерпретатором, и у объекта есть некоторые ссылки на него. Когда вы перезагружаете свою программу, вы снова запускаете свой скрипт и сохраняете в dict только те элементы, которые были указаны во время сценария.

Наиболее простым решением, на мой взгляд, является использование python pickle module. Вы собираетесь сохранить этот файл в файле, а затем загрузите его в попрошайничестве своего скрипта и сохраните его в конце.

вам нужно обновить код сценария с чем-то вроде этого:

default = {'Sarah': 7736815441, 
      'John': 7736815442} 
def start(): 
    #some code here, before you're trying to access phone numbers in your dict 
    try: 
     phonebook = pickle.load(open("data.pb", "r")) 
    except IOError: 
     phonebook = default 

#your script here 

def exit(): 
    #some code here, last chance to modify your dict, 
    #so changes will appear in next program executions 
    pickle.dump(phonebook, open("data.pb", "w")) 

надеюсь, что вы знакомы с функциями питона, если нет - вы можете прочитать о то here

+0

Не только дикты, но и экземпляры пользовательских классов (с некоторыми ограничениями, которые, вероятно, не будут проблемой в вашем случае), могут быть маринованными. –

+0

Здравствуйте, вы можете мне помочь, я готов дать вам код, можете ли вы изменить его для меня и отправить мне? Мне это действительно нужно! Спасибо –

+0

@ RomanSusi да, я знаю это, но в этом случае, как я понял, только dict - это изменяющийся объект. –