如何创建可复用Python模块处理passwd.txt?修复仅返回最后行问题
解决用户管理模块的复用问题
你的splitWordFile函数仅返回最后一行数据,原因是循环过程中每次都会覆盖userName、realName、actualPassword变量,循环结束后自然只剩最后一行的内容。要实现多用户数据的复用,需要将所有用户信息存储为可遍历的结构化数据,同时把登录、删除、改密等常用功能封装到一个可导入的模块中。
重构后的用户管理模块(命名为user_manager.py)
def load_users(): """加载所有用户信息,返回以用户名为键的字典""" users = {} with open("passwd.txt", "r", encoding="utf-8") as file: for line in file: line = line.strip() if not line: continue # 跳过空行 parts = line.split(":") if len(parts) != 3: continue # 跳过格式错误的行 username, realname, password = parts if len(username) <= 1: continue # 跳过用户名无效的行 users[username] = { "realname": realname, "password": password.strip() } return users def save_users(users): """将用户字典写入passwd.txt文件""" with open("passwd.txt", "w", encoding="utf-8") as file: for username, info in users.items(): line = f"{username}:{info['realname']}:{info['password']}\n" file.write(line) def validate_login(username, password): """验证用户名和密码是否匹配,返回布尔值""" users = load_users() if username not in users: return False return users[username]["password"] == password def delete_user(username): """按用户名删除用户,返回是否删除成功""" users = load_users() if username not in users: return False del users[username] save_users(users) return True def change_password(username, old_password, new_password): """验证旧密码后更新新密码,返回是否修改成功""" users = load_users() if username not in users: return False if users[username]["password"] != old_password: return False users[username]["password"] = new_password save_users(users) return True
独立程序的调用示例
将user_manager.py和以下三个程序放在同一目录下,即可直接导入使用:
登录程序(login.py)
from user_manager import validate_login username = input("请输入用户名:") password = input("请输入密码:") if validate_login(username, password): print("登录成功,已授权") else: print("用户名或密码错误")
删除用户程序(delete_user.py)
from user_manager import delete_user username = input("请输入要删除的用户名:") if delete_user(username): print(f"用户{username}已成功删除") else: print("该用户不存在,删除失败")
修改密码程序(change_pwd.py)
from user_manager import change_password username = input("请输入用户名:") old_pwd = input("请输入旧密码:") new_pwd = input("请输入新密码:") if change_password(username, old_pwd, new_pwd): print("密码修改成功") else: print("用户名不存在或旧密码错误,修改失败")
关键说明
load_users将所有用户数据加载为字典,通过用户名作为键,能快速定位目标用户save_users负责将修改后的用户数据写回文件,保证所有操作的持久化- 每个业务逻辑都封装为独立函数,无需重复编写文件读写和数据处理代码
- 独立程序只需导入
user_manager模块,直接调用对应函数即可完成功能
内容的提问来源于stack exchange,提问作者bobby mckeown
相关产品推荐
相关产品推荐

