我正在尝试建立密码管理员,并且我在文本文件中拥有用户帐户的用户名和密码。但是,由于脚本想要知道loginUser和loginPass的用户输入是否在文件中,这为用户创建了使用不匹配的用户名和密码登录的机会。我可以创建一个列表(或至少一对字符串)并检查登录变量的输入是否在特定列表中?
这是我的代码如果您想自己测试一下:
def title():
# This is the title screen
print('____This is a password keeper____')
main()
def main():
abc = open("userpassfile.txt", "r+")
userpassfile = abc.read().strip().split()
actCheck = input('Do you already have an account?')
if(actCheck == 'Yes' or actCheck == 'yes'):
loginUser = input('What is your username?')
loginPass = input('What is yout password?')
if(loginUser and loginPass in userpassfile):
dirCheck = input('Account Settings? [y/n]')
if(dirCheck == 'y' or dirCheck == 'Y'):
print('This function is not working yet!')
else:
print('hihi')
else:
print('Incorrect password or username!')
else:
createAct = input('would you like to create one?')
if (createAct == 'Yes' or createAct == 'yes'):
createUser = input('What would you like your username to be?:')
createPass = input('What would you like your password to be?:')
abc.write(createUser + '\n')
abc.write(createPass + '\n')
open(createUser + '.txt', "w")
title()
如果您对我的代码有任何疑问,请询问!谢谢!
答案 0 :(得分:1)
对我来说,将用户/传递对存储在一行中会更有意义。像
这样的东西user:pass
或者
user|pass
这种方法的问题在于消除了用作用户名或密码的字符(用作分隔符的字符)。为了解决这个限制,您可以执行类似于字符串协议的工作方式,并在该行前面加上代表用户名长度的数字。
004userpass
014longerusernamepassword
您将前3个字符作为整数读取,并知道为用户读取了多少字符以及密码的数量。
当然你也可以用json,yaml或csv等其他几种格式存储它,
鉴于您将它们存储在成对的行中,您应该能够将它们分解为具有与此类似的代码的组:
f = """username1
password1
username2
password2""".splitlines()
pairs = [tuple(f[i*2:i*2+2]) for i in range(len(f)/2)]
print(pairs)
这将输出:
[('username1', 'password1'), ('username2', 'password2')]
然后你只需检查
if (loginUser, loginPass) in pairs:
...
您可以使用更通用的方法将用户名/密码列表分成对,也可以使用此功能
def groups(inval, size):
for i in range(0, len(inval), size):
yield inval[i:i+size]
然后你可以做
pairs = tuple(groups(f, 2))