2017-10-02 16 views
0

私は実際に保存する新しいdictエントリを実行するときに確認する方法を理解しようとしています。最後の例外の前に、 "print(dictio.fullDict3 [firstLetter])"を実行すると、新しいdictエントリが追加されますが、実際にはdictioという外部ファイルには保存されません。Pythonで外部ファイルの保存を追加しないでください

次はメインです:

import fileinput 
import dictio 
from dictio import fullDict3 

while True: 
    try: 
     srcTxt = input("Input word you want to look up: ") 
     firstLetter = srcTxt[0] 
     print(dictio.fullDict3[firstLetter][srcTxt]) 
    except: 
     try: 
       queryInput = input('What does '+srcTxt+' mean?: ')  
       with open("C:\\Users...\\dictio.py", "a"):     
        dictio.fullDict3[firstLetter].update({srcTxt:queryInput}) 
        print(dictio.fullDict3[firstLetter])        
     except: 
        print("error has occured.") 

次は辞書を保持しているdictio.pyと呼ばれる外部ファイルです:

fullDict3 = { 
    '0':{ 
     '0data':'0datttaaa', 
     '0mada':'0mmmaadaa' 
    }, 
    'a':{ 
     'arbre':'tree', 
     'arc-en-ciel':'rainbow' 
    }, 
    'b':{ 
     'bierre':'beer', 
     'belle':'beautiful'  
    } 
} 
+1

あなたのコードでは、あなたがファイルに書き込んでいると思いますか? – larsks

+0

私はappendのために "a"と考えていましたが、その更新はfullDict3というファイルのdictを更新します。私は、私がその操作の後にdictを印刷したときに、そのdictの最後に追加されているので、私がこれをした印象の下にあったと思います。 –

+1

変数の値を変更してもファイルIOは実行されません。あなたは効果的に 'open'文の結果を破棄します(pythonがオープンし、名前付きファイルを作成することもありますが、' open'の戻り値を変数に代入することは決してありません。 )。 – larsks

答えて

0

あなたがして、モジュールの内容を変更することはできませんインポートを介してモジュールのコンテンツを操作します。 fullDict3をインポートする理由はありません。代わりに、開始構造をfullDict3.jsonに保存してください。そのファイルをjson.load経由でPythonオブジェクトに変換すると、変更可能なdictが返されます。更新されたdictをディスクに書き込む準備ができたら、json.dumpで保存します。

+0

jsonを使わずにエクスポートするだけで簡単にモジュール化された方法があると思いました。私はそれからjsonを読まなければならないでしょう。ありがとう! –

0

いいえ。コーディングに時間がかかりませんでしたが、最終的にはいくつかの読書と試行後に問題を修正しましたが、答えを見つけた人は誰でも簡単に、より効率的な方法で作業を終えることができます:

while True: 
    try: 
     srcTxt = input("Input word you want to look up: ") 
     firstLetter = srcTxt[0] 
     if srcTxt == "ESC": 
      break 
     print(dictio.fullDict3[firstLetter][srcTxt]) 
    except: 
     try: 
      queryInput = input('What does '+srcTxt+' mean?: ') 
      with open('C:\\Users...\\dictio.py', 'r') as f: 
       fullDict3[firstLetter].update({srcTxt:queryInput}) 
       newDict = "fullDict3 = "+json.dumps(fullDict3) 
      with open('C:\\Users...\\dictio.py', 'w') as f: 
       f.write(newDict) 
       f.close() 
     except: 
      print("error has occured.") 
関連する問題