基于Python的TXT用户数据库开发:如何提取存储数据用作登录凭据
从本地TXT存储文件提取凭据实现登录校验的落地方法
一、先修正你现有代码里的基础bug
- 密码校验分支变量名写错:判断密码不合规时,代码重新赋值的是
username变量,而非password,逻辑完全错位,输入不合规密码后会直接覆盖之前输入的用户名数据。 - 现有
login()函数无实际作用:仅调用open()打开了其他路径的脚本文件,既没有读取文件内容,也没有实现任何登录交互逻辑,属于空函数。 - 字段格式不统一:后续解析时需要保证写入文件的「字段名: 字段值」格式和解析逻辑完全匹配,避免大小写、冒号前后空格不一致导致的提取失败。
二、核心:TXT存储文件的结构化解析实现
你的文件存储结构是单条账号信息块之间用3个换行分隔,块内逐行存储键值对格式的用户信息,可以按以下逻辑提取所有存储数据:
- 一次性读取全文件内容
- 按连续空行拆分出每一个独立的账号信息块
- 对每个块逐行解析,按第一个冒号拆分键和值,过滤无效空行
- 把所有解析结果存为结构化的账号列表,方便后续校验
对应可直接运行的解析代码:
def parse_accounts_from_txt(file_path): # 读取文件全内容,指定utf-8编码避免中文乱码 with open(file_path, 'r', encoding='utf-8') as f: raw_content = f.read() # 按你写入时的3个换行分割独立账号块 account_blocks = [block.strip() for block in raw_content.split('\n\n\n') if block.strip()] valid_accounts = [] for block in account_blocks: single_account = {} for line in block.split('\n'): line = line.strip() if not line: continue # 按第一个冒号拆分,避免值本身带冒号导致拆分错误 field_name, field_value = line.split(':', 1) # 统一转小写做键名,消除大小写不匹配的问题 single_account[field_name.strip().lower()] = field_value.strip() if single_account: valid_accounts.append(single_account) return valid_accounts
三、登录校验逻辑实现
拿到结构化的账号列表后,登录校验流程不需要复杂逻辑:
- 提示用户输入待校验的用户名、密码
- 遍历所有已存储的账号条目,匹配对应用户名
- 匹配到用户名后核对密码一致性,返回校验结果
对应实现代码:
def do_login(database_file_path): # 加载所有已存储的账号数据 saved_accounts = parse_accounts_from_txt(database_file_path) input_user = input("请输入登录用户名:").strip() input_pwd = input("请输入登录密码:").strip() for acc in saved_accounts: if acc.get('username') == input_user: if acc.get('password') == input_pwd: print("登录成功") return True print("密码错误,请重新输入") return False print("未查询到对应用户名,请检查输入") return False
关键注意事项
- 当前实现为明文存储密码到TXT文件,正式使用场景绝对禁止这种存储方式,至少要对密码做哈希加密后再写入文件,避免文件泄露导致全部账号凭据暴露。
- 写入存储文件的目标文件夹要提前手动创建,不然程序写文件时会抛出路径不存在的错误。
- 解析逻辑和写入逻辑的分隔格式要严格对齐,比如调整了写入时的换行数,解析时的分割分隔符也要同步修改。
内容的提问来源于stack exchange,提问作者Bipolar Sheep
相关产品推荐
相关产品推荐

