1

現在、次の情報を含むファイル .txt を使用しています。

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

次に、私のpythonプログラムでは、最初にそのデータを次のようにロードします。

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]

これまでのところ完璧に動作しますが、これはチャットボット用であるため、その変数の値をチャットから直接変更できるようにしたいと考えており、チャットから「!Enable corrector」を呼び出したときにこのコードを試しました。

  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が変数を変更したことを受け入れていないようで、すでに「有効」になっているにもかかわらず、「無効」であるとまだ考えていることです。プログラムを再起動するまで、変数は「有効」として読み取られません。

変数の更新オプションや、その場で変数の値を変更して再起動せずに効果を持続させる回避策があるかどうか疑問に思っていました。

4

1 に答える 1

2

その場で変数の値を変更する

このコードは、その場で変数の値を変更します。

a = 1
a = 2

あなたの質問は、計算された名前で値を検索できるようにしたいことを示唆しています。解決策は、次を使用することdictです。

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

ファイルの値を変更したい場合は、持っているデータに基づいて新しいファイルを書き出す必要があります。json を読み込んでいるように見えるので、このjsonモジュールが役に立ちます。

于 2013-08-27T20:24:59.877 に答える