Как назначить переменную для dict, сохраненного в текстовом файле в Python - PullRequest
0 голосов
/ 16 февраля 2019

Как новичок, я пытаюсь написать программу списка контактов, используя для сохранения данных dict, сохраненный в текстовом файле contacts.txt. Для обновления dict контактов я могу использовать contacts.update (dict2), dict2 - входные данные для нового контакта.Я попробовал приведенный ниже код, но он не работает:

new_entry = {}
# contacts = {}


contacts = contacts_file = open("contacts.txt", 'a+')

def data(): 
    cell = input("Enter cell number: ")
    first = input("Enter first name: ")
    last = input("Enter last name: ")

    new_entry = {cell: (first, last)}
    print("NEW ENTRY:" + str(new_entry))

data()

contacts.update(new_entry)
print("CONTACTS: " + str(contacts))


def write_to_file():
    contacts_file = open("contacts.txt", 'w')
    contacts_file.write(str(contacts))
    contacts_file.close()

write_to_file()

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

Но я получаю ошибку: AttributeError: у объекта '_io.TextIOWrapper' нет атрибута 'update' при запуске программы.

Очевидно, что проблема заключается здесь:

contacts = contacts_file = open("contacts.txt", 'a+')

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

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

Что я делаю не так?

Спасибо,

Андре

1 Ответ

0 голосов
/ 16 февраля 2019

В файле нет такого понятия, как dict (или любой другой объект Python).Вы можете иметь строковое представление этого.Вам нужно открыть файл, десериализовать объект, обновить его, затем сериализовать и записать обратно в файл.Например, используя json:

import json

with open('some_file') as f:
    deserialized_object = json.load(f)
    deserialized_object['key_to_update'] = 'updated_value'
    serialized_object = json.dumps(deserialized_object)

    f.seek(0)
    f.write(serialized_object)
    f.truncate()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...