You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python登录功能问题:用户输入无法匹配文本文件账号信息

登录验证程序问题排查与修复

问题描述

我正在编写一个支持用户通过用户名和密码登录的Python程序,用户输入的账号信息需要和accounts.txt中的数据比对。但即便输入文件中存在的账号(比如robotman),程序仍返回invalid!,希望匹配成功时能返回logged in!。

我的代码:

def login_fn():
    print("Please enter your account details below.")
    current_usrname = input("Username: >")
    current_pswrd = input("Password: >")
    account_login.update({current_usrname:current_pswrd})
    with open('accounts.txt', 'r') as file:
        file.readlines()
        if account_login in file:
            print("logged in!")
        else:
            print("invalid!")

accounts.txt内容:

fredsmart1,1234567890
jrobertson4,r@=%8(_W=1
bob101,1234598abc
marcusw,3#tr@9dw%4
popeyedd,1989eidjce
junkman00,p3*(kd8&ld
sbj2021,$d5e(ep2(de4ab3
robotman,7777Spy007

问题原因

  1. 读取文件后未利用内容:file.readlines()仅读取了文件内容,但未将数据保存到变量中,后续验证逻辑完全没用到这些账号信息。
  2. 错误的比对逻辑:if account_login in file完全不成立——file是文件对象,无法直接与字典做包含判断;且执行readlines()后文件指针已移到末尾,这个判断永远返回False。
  3. 多余的字典使用:account_login字典在这里没有必要,单次登录只需验证当前输入的一组用户名和密码,无需维护全局字典。

修复方案

方案1:逐行验证账号密码

适合单次登录验证,逐行读取文件并比对输入内容:

def login_fn():
    print("Please enter your account details below.")
    current_usrname = input("Username: >")
    current_pswrd = input("Password: >")
    
    is_valid = False
    with open('accounts.txt', 'r') as file:
        for line in file:
            # 去除换行符并跳过空行
            line = line.strip()
            if not line:
                continue
            # 拆分用户名和密码
            username, password = line.split(',')
            if username == current_usrname and password == current_pswrd:
                is_valid = True
                break
    
    print("logged in!" if is_valid else "invalid!")

方案2:预加载所有账号到字典验证

适合频繁登录场景,一次性加载所有账号到字典,验证效率更高:

def login_fn():
    print("Please enter your account details below.")
    current_usrname = input("Username: >")
    current_pswrd = input("Password: >")
    
    # 加载所有账号到字典
    accounts = {}
    with open('accounts.txt', 'r') as file:
        for line in file:
            line = line.strip()
            if not line:
                continue
            username, password = line.split(',')
            accounts[username] = password
    
    # 验证账号密码
    if current_usrname in accounts and accounts[current_usrname] == current_pswrd:
        print("logged in!")
    else:
        print("invalid!")

注意事项

  • 确保accounts.txt与程序在同一目录下,或使用完整文件路径。
  • strip()和空行判断可避免文件中存在空格、空行时的解析错误。

内容的提问来源于stack exchange,提问作者gorillaTime45

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 06:22:19