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

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_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:45:04