Python自动更新存储账号密码的外部字典文件失败如何解决
注意:本项目极易遭受网络攻击,仅为模拟服务,不存储任何真实敏感信息
问题原因
你当前的写法只是修改了内存中加载的users_details模块对象的属性,所有修改都只会保留在程序运行期间,程序结束后内存数据就会释放,不会自动写入到对应的users_details.py源文件里,所以下次启动程序时会读取到原始的文件内容,看不到上次的修改。
解决方案
推荐优先使用JSON文件存储用户数据,操作更稳定,不会破坏源代码文件,实现逻辑如下:
- 先在项目目录下新建
user_data.json文件,写入初始内容:
{ "user_details": {}, "user_balance": {} }
- 替换你原有代码为以下内容:
import json # 程序启动时读取已存储的用户数据 with open("user_data.json", "r", encoding="utf-8") as f: user_data = json.load(f) user_details = user_data["user_details"] user_balance = user_data["user_balance"] print("欢迎新用户,您可以在此注册账号!") desired_username = input("请输入您想要使用的用户名:") if desired_username in user_details: print("您已经有账号了,请直接登录") else: print("用户名可用!请输入密码") print("密码无特殊限制,请妥善保管") desired_password = input("请在此输入密码:") print("正在将您的信息添加到数据库并生成初始余额...") user_details[desired_username] = desired_password user_balance[desired_username] = 1000 # 将修改后的用户数据写回JSON文件持久化存储 with open("user_data.json", "w", encoding="utf-8") as f: json.dump( {"user_details": user_details, "user_balance": user_balance}, f, ensure_ascii=False, indent=2 ) print("您的账号已注册成功!")
如果你确实需要直接写入users_details.py源文件,可以用以下方案(风险提示:写入过程出错会直接破坏源文件,不推荐生产环境使用):
import users_details print("欢迎新用户,您可以在此注册账号!") desired_username = input("请输入您想要使用的用户名:") if desired_username in users_details.user_details: print("您已经有账号了,请直接登录") else: print("用户名可用!请输入密码") print("密码无特殊限制,请妥善保管") desired_password = input("请在此输入密码:") print("正在将您的信息添加到数据库并生成初始余额...") users_details.user_details[desired_username] = desired_password users_details.user_balance[desired_username] = 1000 # 将修改后的字典直接覆盖写入源文件 with open("users_details.py", "w", encoding="utf-8") as f: f.write(f"user_details = {repr(users_details.user_details)}\n") f.write(f"user_balance = {repr(users_details.user_balance)}\n") print("您的账号已注册成功!")
内容的提问来源于stack exchange,提问作者DawsUTV
相关产品推荐
相关产品推荐

