2017-11-30 7 views
0

のためのテキストファイルを通読する方法**これは、私は、ID &パスワードを含むテキストファイルを持って練習アプリケーションPythonは - キーワード

です。各ペアはそうのような別々の行にある:

P1 dogs 
P2 tree 

Iは、ユーザが別のID /パスワードを追加したり、新しいパスワードをIDを選択することにより、パスワードを更新できるように2つの機能を有しています。 (私はテスト時にペアの負荷を作成しないように保存機能を削除しました)

質問はどうすればユーザーが新しいペアを作成しているかをチェックします。 /パスワードは既に存在します。次に、パスワードの更新機能では、パスワードが存在するかどうかを確認するだけですか?これまで

マイコード:

#Keyword check 
def used_before_check(keyword, fname): 
    for line in open(fname, 'r'): 
     login_info = line.split() 
     username_found = False 
     for line in login_info: 
      if keyword in line: 
       username_found == True 

      if username_found == True: 
       return True 
      else: 
       return False 

# New password function 
def new_password(): 
    print("\nCreate a new password") 
    new_id_input = input("Please give your new password an ID: ") 
    new_password_input = input("Please enter your new password: ") 

    print("ID in use?", used_before_check(new_id_input, txt_file)) 
    print("Password in use?", used_before_check(new_password_input, txt_file)) 

#Change password function 
def change_password(): 
    print("\nChange password") 
    id_input = input("Enter the ID of the password you'd like to change: ") 
    password_input = input("Now enter the new password: ") 

    print("password_input",used_before_check(password_input, txt_file)) 
+0

コードで最初の行のみをチェックすると、なぜパスワードをチェックするのかわかりません。パスワードの場合、複数のプロファイルで同じパスワードを使用できます。私はIDまたはパスワードをチェックしたい場合は、IDを持つ辞書をキーまたは2つのセットとして使用します。コンテキストをより良く説明してください。 – WisdomPill

+1

辞書を使ってIDとパスワードを保存すると、これをもっと簡単にすることができます。次に、['json'モジュール](http://docs.python.org/3/library/json.html)を使用してデータを格納/取得します。しかし、それに加えて(と平文のパスワードを格納する上での問題に加えて)、なぜ重複したパスワードを許可しないのですか?そうしないと、攻撃者が他のアカウントをハイジャックすることが容易になります。なぜなら、どのパスワードが使用中であるかを簡単に知ることができ、データベースをハックする必要がないからです。 –

+0

BTW、これだけですおもちゃのプログラムであり、重要なことのために平文のパスワードを格納していないということです。 –

答えて

1

最も簡単な方法は、JSONを使用することです:

import json 
import os 

def new_password(user, password, password_dict={}): 
    if user in password_dict: 
     password_dict[user] = password # change password 
    else: 
     password_dict[user] = password # new password 
    return password_dict 

def read_passwords(filename): 
    if not os._exists(filename): 
     return {} 
    with open(filename, 'r') as f: 
     s = f.read() 
    return json.loads(s) 

password_filename = 'my_passwords.json' 
password_dict = read_passwords(password_filename) 
user = '' 
while not user == 'q': 
    user = input('user:') 
    password = input('new password:') 
    if user != 'q': 
     password_dict = new_password(user, password, password_dict) 

s = json.dumps(password_dict) 
with open(password_filename, 'w') as f: 
    f.write(s) 

ない私はnew_passwordで一見不必要な場合句が含まれていること。これはちょうどあなたのために、それぞれの場合にあなたがしたい(多分異なるかもしれない)あなた自身のコードを簡単に入力することができます。

+0

関数の下にあるものはどこから呼び出されますか? – TheGarrett

+0

「機能の下にあるもの」とはどういう意味ですか? – mrCarnivore

+0

password_filename = 'my_passwords.json' – TheGarrett

1

が辞書にあなたのユーザ名/パスワードを保存する機能を作成し、その後、あなたは簡単に既存のユーザー名/パスワード辞書に格納すること

のためにそれを確認することができます:

def process_file(fname): 

    username_pw_dict = {} 

    for line in open(fname, 'r'): 
     login_info = line.rstrip().split() 

     username = login_info[0] 
     pw = login_info[1] 
     username_pw_dict[username] = pw 
    return username_pw_dict 

username_pw_dict = process_file(fname) 

次に、あなたは、このような既存のユーザー名やパスワードを確認することができます。

if new_username in username_pw_dict: 
    print("username already exists") 

if new_pw in username_pw_dict.values(): 
    print("password already exists")  
1

ファイルを読むときは、すべてのIDをキーにして辞書を作成します。 次の手順では、すべての値(すべてのパスワード)がそのキーになるように辞書のキーと値のペアを逆にします。

最後に、新しいIDとパスワードを入力するときに、それらの辞書が既に存在するかどうかを確認するだけです。

dict_ids = {1 : "one", 2:"two", 3:"three"}; 


dict_pwds = {} 
for key, value in dict_ids.items(): 
    for string in value:   
     dict_pwds[value] = key; 


print "dict_ids ", dict_ids; 
print "dict_pwds ", dict_pwds; 


if 'myid' in dict_ids.keys(): 
    print "ID exist! " 
else: 
    print "New ID" 

if 'mypwd' in dict_pwds.keys(): 
    print "Password exist! " 
else: 
    print "New Password" 
関連する問題