Python密码管理器新增条目时字典被新输入覆盖问题如何解决
Python密码管理器覆盖原有存储问题修复
问题说明
当前开发的密码管理器已实现功能如下:
- 支持用户选择新建密码或查询密码两个功能
- 新建密码时将账号/用途、对应密码存入字典后写入本地文本文件
- 查询密码时输入对应账号即可检索到已存储的密码
当前存在的唯一问题:每次新建密码时,新条目会覆盖本地原有存储的所有密码,无法追加新条目。
问题根因
- 新建密码逻辑执行前,没有提前读取本地已存储的历史密码数据,直接使用初始化的空字典添加新条目
- 写入文件时直接用新的单条目字典覆盖原有文件内容,导致历史数据丢失
修复后完整代码
import json prompt = "如果需要新建密码,请输入“新建密码”" prompt += "\n如果需要查询密码,请输入“查询密码”\n" answer = input(prompt) answer = answer.upper() found = 0 # 用于标记是否找到对应账号 if answer == "新建密码".upper(): # 先读取本地已有密码,无文件则初始化空字典 passwords = {} try: with open("passwords.txt", "r") as f: passwords = json.loads(f.read()) except FileNotFoundError: pass account_name = input("请输入该密码对应的用途/账号:") account_name = account_name.upper() password_name = input("请输入密码:") passwords[account_name] = password_name with open("passwords.txt", 'w') as f: f.write(json.dumps(passwords)) print("密码已保存!") elif answer == "查询密码".upper(): try: with open("passwords.txt", "r") as f: passwords = json.loads(f.read()) if not passwords: print("暂无已保存的密码,请先新建密码!") else: search_account = input("请输入要查询的密码用途/账号:") search_account = search_account.upper() if search_account in passwords: print(f"对应的密码为:'{passwords[search_account]}'") found = 1 if found != 1: print("抱歉,未找到对应账号的密码。") except FileNotFoundError: print("暂无已保存的密码,请先新建密码!")
核心优化点
- 新建密码前优先读取本地已存的历史密码数据,追加新条目后再整体写入文件
- 新增本地文件不存在的异常处理,兼容首次运行场景
- 简化了查询逻辑,无需遍历字典所有key,直接用
in判断账号是否存在,运行效率更高 - 所有交互提示已汉化,更符合中文用户使用习惯
内容的提问来源于stack exchange,提问作者Giannis_
相关产品推荐
相关产品推荐

