Сохранение словаря в файл с пользовательским вводом - PullRequest
0 голосов
/ 07 июня 2019

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

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

addressbook = {}
while(True):

    print('ADDRESS BOOK')
    print('-----------------------')
    print('-----------------------')
    print('1 - Add/Update contact')
    print('2 - Display all contacts')
    print('3 - Search')
    print('4 - Delete contact')
    print('5 - Quit')
    choice = input('')

    if choice == ('1'):
        addupdate = input('Do you want to add(1) or update(2) a contact?')
        if addupdate == ('1'):
            name = input('Enter the persons name:')
            address = input('Enter the address:')
            addressbook[name] = address
            print('Name added')
        elif addupdate == ('2'):
            thechange = input('''Who's address do you want to change?:''')
            newaddress = input('''What is the new address?:''')
            for key, value in addressbook.items():
                if key == thechange:
                    del addressbook[key]
                    addressbook[thechange] = newaddress
                    print('Address updated')
                    break

    elif choice == ('2'):
        for key, value in addressbook.items():
            print('Name:' + key)
            print('Address:' + value)
            print('--------')
    elif choice == ('3'):
        search_name = input('''Who's name do you want to search?:''')
        position = 0
        for key, value in addressbook.items():
            position = position + 1
            if key == search_name:
                print('Name %s found in %s position' % (search_name, position))
                break
            else:
                print('Name %s not found in %s position' %
                      (search_name, position))
    elif choice == ('4'):
        which_one = input('''Who's address do you want to delete?:''')
        for key, value in addressbook.items():
            if key == which_one:
                del addressbook[key]
                print('%s deleted' % which_one)
                break
            else:
                print('Name not found')
    elif choice == ('5'):
        addressfile = open('/home/robert/Addressbook.txt', 'w')
        addressfile.write(str(addressbook))
        addressfile.close
        break
addressfile = open('/home/robert/Addressbook.txt')
addressname = str(addressfile.read())

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

1 Ответ

1 голос
/ 07 июня 2019

Две проблемы.Во-первых, вы используете код w, что означает перезапись, когда вы не хотите использовать a, что означает добавление:

addressfile = open('/home/robert/Addressbook.txt', 'a')

Во-вторых, вы не закрываете файл.Вы вызываете функцию addressfile.close, но вы не вызываете , поэтому файл никогда не сохраняется, поэтому после его запуска ничего не появляется.Сделайте это:

addressfile.close()

или, если вы не хотите иметь дело с закрытием файла, вы можете использовать with, который делает это автоматически, когда вы выходите из блока with:

elif choice == '5':
    with open('/home/robert/Addressbook.txt', 'a') as addressfile:
        addressfile.write(str(addressbook))
    break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...