2017-01-03 20 views
0

私は電子メールとパスワードをリストのテキストファイルに入れました。フォーマットは["[email protected]","Password1"],["[email protected]","Password2]です。Pythonはテキストファイルから正しく読み込みませんか?

私のコードは、テキストファイルから読み込み、それをテキストファイルに存在するかどうかを確認するためにユーザー入力と比較します。何らかの理由で最初のメール"[email protected]"を入力すると、それはテキストファイルから読み取られますが、"Password1"ではなく、"[email protected]"と正しく"Password2"が正しく読み取られます。私はこれを回避し、これを修正するための方法を見つけることができません?エラーは受信されないので、どこが間違っているのか分かりません。コードが実行された場合

def Login(): 
    with open("logindata.txt","r") as file: 
     for line in file: 
      line=line.split(",") 
      logindata.append([line[0],line[1].rstrip()]) 
     print(logindata) 
    found=False 
    while found == False: 
     email=input("Enter email:") 
     password=input("Enter password:") 
     with open("logindata.txt","r")as file: 
      for line in file: 
       line = line.split(",") 
       if email in line: 
        print("Correct email") 
       if password in line: 
        print("Correct Password") 
        found=True 
if __name__ == "__main__": 
Login() 

と私はその後、唯一の第二メールアドレスとパスワードの組み合わせが動作開始時に与えた入力を試してみてください。ここに私のコードです。ここでは、テキストファイルがtext file format

追加するように見えるものです:あなたが行区切りでテキストを読んでいる

username=input("Enter a new email") 
     password=input("Enter a password") 
     with open('logindata.txt','a')as file: 
      line='\n'+ username + ',' + password 
      file.write(line) 
     print("user added") 
+0

あなたが削除するのを忘れ改行; 'password'は行にないので、' password \ n'は行にあります。 –

+0

@MartijnPietersこれに戻って申し訳ありませんが、テキストファイルに新しいメールを追加したい場合は、\ nをパスワードの最後に置いて次の行に追加する必要があります。 – Tom

+0

最良の方法: 'csv.writer()'を使ってファイルを書きます。 'writerow()'メソッドを使うたびに改行が追加されます。それ以外の場合は、書き込み時に手動で追加します。 'fileobj.write( '{}、{} \ n'.format(userid、password))'などです。 –

答えて

2

。あなたの行はこのようには見えません。

[email protected],Password1 

彼らは実際には次のようになります。

[email protected],Password1\n 

カンマでそれを分割するときは、これを取得:

line = ['[email protected]', 'Password1\n'] 

とテストを'Password1' in lineは失敗しますが、'Password1\n'は成功します。

\nは改行文字です。最初に削除する必要があります。

for line in file: 
    line = line.strip().split(",") 
    if email in line: 
     print("Correct email") 
    if password in line: 
     print("Correct Password") 

のではなく、手動で分割、あなたのファイルを読むためにcsv moduleを使用することができます:あなたは手近に開始と終了からすべての空白を削除するためにstr.strip()を使用することができ

import csv 

with open("logindata.txt", "r") as file: 
    reader = csv.reader(file) 
    for user, pw in reader: 
     if email == user: 
      print("Correct email") 
     if password == pw: 
      print("Correct Password") 
関連する問題