Python:如何在前一行的基础上从文本文件中读取特定的一行



如果这是重复的,我很抱歉,但我找不到任何符合我特定问题的内容。我正在创建一个类似银行系统的项目,从文本文件中读取用户名、密码和金额。我设置了一个文本文件,第一行是用户名,第二行是密码,第三行是金额,然后是另一个具有相同模式的块。我正在检查用户输入的用户名是否在文件中,然后检查下一行,并检查输入的密码是否在下一行。

f = open_file("D:/PythonProjects/banking.txt", "r") #open file   
read_file = f.read() #store contents of file in variable
name = input("Username: ")
pword = input("Password: ")
if name in read_file: #check if username is in file contents variable
if pword in read_file:
print("match")

到目前为止,如果您在文件中输入名称/密码,就会打印"match",但我只是在寻找匹配的密码。我还有一个函数,它返回下一行,并尝试调用两次,以获得名称行之后的行。

def next_line(the_file):
'''Returns the next line from the_file'''
line = the_file.readline()
line = line.rstrip()
return line

除了其他答案中提到的安全(加密(和效率(数据库(问题外,这里有一个可能的解决方案,可以将文件直接解析到字典中:

data = {}
filename = "D:/PythonProjects/banking.txt"
with open(filename, "r") as fh:
username = ""
password = ""
amount = -1
line_mode = 1
for line in fh:
if line_mode % 3 == 1:
username = line.strip()
data[username] = {}
elif line_mode % 3 == 2:
password = line.strip()
data[username][password] = -1
elif line_mode % 3 == 0:
amount = float(line.strip())
data[username][password] = amount
line_mode += 1 
input_name = input("Username: ")
input_password = input("Password: ")
if input_name in data and input_password in data[input_name]:
print("amount", data[input_name][input_password])
else:
print("User not found or password incorrect")

编辑:我想到了一个更短的解决方案:

filename = "D:/PythonProjects/banking.tx"
data = {}
with open(filename, "r") as fh:
lines = [line.strip() for line in fh.readlines()]
for i in range(0, len(lines), 3):
data.setdefault(lines[i], {})[lines[i+1]] = lines[i+2]

lines[i]lines[i+1]lines[i+3]是用户名、密码和金额。

dict.setdefault(key, default)要么返回密钥lines[i]的数据值,即用户名的条目(如果它已经存在(,要么创建一个以用户名为密钥的新dict,然后返回它。现在确保数据[lines[i]]存在并且可以用密码(lines[i+1](和金额(lines[i+2](填充。

最好使用数据库。SQLite是一个很好的起点。您甚至不需要安装任何东西(因为SQLite已经包含在Python中(。玩得高兴

最新更新