2013-08-27 87 views
1

現在我有一個文件名爲.txt正與此信息的變量的值:Python中如何動態更改

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

然後在我的Python程序加載,在很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

[dynamic variable]的可能重複(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。所以問題是一個變量不能從一個列表更新他們的信息,但它可以從一個字典?這就是我從你的答案中瞭解到的。 – Saelyth

+0

@Saelyth「一個變量不能從列表更新信息,但它可以來自字典」並不意味着什麼。變量不會從任何東西更新其信息。變量通過賦值語句獲取新值。而已。 – Marcin

+0

好的,對不起,我可以如何在這個。我只是學習Python作爲我的第一個編程語言,我主要從我可以從谷歌或本網站獲得的信息中學習。感謝你的回答,我會嘗試從現在開始使用字典(嗯,我必須學習,因爲我不知道10分鐘前的字典是什麼)。謝謝! – Saelyth