2013-08-27 4 views
1

Сейчас я работаю с файлом .txt с этой информацией:Python, как изменить значение переменной на лету

["corrector", "Enabled"] 
["Inteligencia", "Enabled"] 

Тогда в моей питона программе загружает эти данные в самом beggining, таким образом:

for line in open("menu.txt", 'r'): 
    retrieved = json.loads(line) 
    if retrieved[0] == "corrector": 
    corrector = retrieved[1] 
    if retrieved[0] == "Inteligencia": 
    Inteligencia = retrieved[1] 

до сих пор она работает идеально, однако, как это чат-бот, я хочу, чтобы сделать возможным изменить значение того, что переменные непосредственно из чата, и я попробовал этот код, когда я называю «Включить корректор» из чата.

if corrector == "Enabled": 
    room.message("ERROR: Already Enabled") 
    else: 
    data = [] 
    with open('menu.txt', 'r+') as f: 
     for line in f: 
     data_line = json.loads(line) 
     if data_line[0] == "corrector": 
      data_line[1] = "Enabled" 
     data.append(data_line) 
     f.seek(0) 
     f.writelines(["%s\n" % json.dumps(i) for i in data]) 
     f.truncate() 
    room.message("corrector enabled") 

Это также работает, и если я открываю файл .txt, я могу увидеть значение, которое оно уже изменило. Реальная проблема заключается в том, что python, похоже, не согласился с тем, что я изменил переменную, и она по-прежнему считает, что она «отключена», хотя она уже «включена». Он не будет читать переменную как «включен», пока я не перезапущу программу.

Мне было интересно, есть ли опция обновления для переменных или обходной путь, чтобы изменить значение переменных «на лету» и заставить эффект длиться без перезагрузки.

+0

Возможный дубликат [динамическая переменная] (http://stackoverflow.com/questions/10963804/dynamic-variable) – Marcin

+3

Переменные не привязаны к тому месту, откуда они пришли; похоже, существует фундаментальное непонимание того, что такое «переменная». Вы должны снова прочитать файл. – Izkata

+0

Возможный дубликат [Как создать неизвестное количество переменных в python] (http://stackoverflow.com/questions/17685199/how-to-create-an-unknown-amount-of-variables-in-python) – abarnert

ответ

2

изменить значение через переменных на лету

Этот код изменяет значение переменной на лету:

a = 1 
a = 2 

Ваш вопрос предполагает, что вы хотите, чтобы иметь возможность найдите значение по вычисленному имени. Решение состоит в том, чтобы использовать dict:

mydict = {'corrector':0} 
mydict['corrector'] = 1 

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

+0

Да, я использую json. Таким образом, проблема в том, что переменная не может обновлять свою информацию из списка, но это может быть из dict? Вот что я понял из вашего ответа. – Saelyth

+0

@Saelyth "переменная не может обновлять свою информацию из списка, но может быть от dict" ничего не значит. Переменная не обновляет свою информацию ни от чего. Переменная получает новое значение через оператор присваивания. Вот и все. – Marcin

+0

А, ладно, извините, как noob я могу быть на этом. Я просто изучаю python как свой первый язык программирования, и я в основном изучаю информацию, которую я могу получить из Google или этого веб-сайта. Спасибо за ответ, я попытаюсь использовать dicts с этого момента (ну, я должен буду учиться, поскольку я не знал, что такое дикт 10 минут назад). Благодаря! – Saelyth

Смежные вопросы