2017-08-01 4 views
-1

まず、私はpythonの初心者ですので、必要な場合を除き、上級の回答は控えてください。私はユーザー名とパスワードを必要とするログインプログラムを書いています。ファイルを読み込んで辞書に追加し、人がログインするか新しいログインを作成し、新しいログインを書き込みますプログラムを再実行すると、読み込みと書き戻しが行われます...私が実行している問題は、新しいログインが作成されると、新しいログインがファイルに書き込まれますが、同時に書き込まれるということですもう一方の辞書は辞書にファイルに再度ログインします。ユーザー名とパスが繰り返されないようにする方法はありますか?ここでは、テキストファイルがどのように見えるかの例です:ユーザ名とパスワード辞書を使用してファイルに書き込むpythonプログラムどのように反復しないで行うのですか

joe dw < ---- old login and pass 
joe dw <---- repeated login and pass 
jack dw <--- new login and pass 

それは混乱に見えるか、私は多くのコメントを持っていないことを怒っている場合、私はすべてをコメントするだけで新たなんだ場合、これは私のコードに残念です私が行います。dictToFile

login = {} 
def fileToDict(): 
    '''this reads the file and writes it into the dictionary''' 
    with open("login.txt", "r") as f: 
     for line in f: 
      (key, val) = line.split() 
      login[key] = val 

def addUser(username, password): 
    '''basic user and login function''' 
    if username in login: 
     print("Username already exists") 
    else: 
     login[username] = password 
     dictToFile() 
def checkUser(username, password): 
    '''checks where the username and password is in the dictionary''' 
    if username in login: 
     if password == login[username]: 
      return True 
     else: 
      return False 
    else: 
     return False 
def dictToFile(): 
    '''this writes the current dictionary into a file''' 
    with open("login.txt", "a+") as f: 
     for k, v in login.items(): 
      line = '{} {}'.format(k, v) 
      print(line, file=f)   
fileToDict() 
addUser("john","dw") 
print(login) 

答えて

1

は、あなたは追加用にファイルを開いた("a+")、は、ファイルの最後にを追加しています。すでに存在するものを上書きする場合は、"w"を使用してください。

+0

私はupvoteを意味しなかった、私はdownvoteすることを意味しました。とにかく、私は実際に何かを上書きしたくない、私はテキストファイルに追加したい、私はちょうど同じユーザー名とパスワードを繰り返すしたくない。 – Joe

+0

'dictToFile'は古いものと新しいものの* all *をループしますが、それらを区別することはできません。それを考えると、ファイル全体を上書きすることで、目的の出力を生成することができます。新しいものだけを追加したい場合は、それらを識別するための何らかの方法が必要です。 –

+0

オハイオ州私はちょうどあなたが正しいことを認識しました!ありがとうxD – Joe

関連する問題