Python:您如何基于前一行从文本文件中读取特定行?

时间:2018-07-23 16:38:23

标签: python-3.x text-files

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

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

2 个答案:

答案 0 :(得分:1)

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

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]的数据值(即用户名的条目,如果已​​经存在),或者创建一个以用户名作为键的新字典,然后返回。 现在确保data [lines [i]]存在并且可以用密码(lines[i+1])和密码(lines[i+2])填充。

答案 1 :(得分:0)

更好地使用数据库。 SQLite是一个很好的起点。您甚至无需安装任何程序(因为Python已包含SQLite)。玩得开心。