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

Python pickle存储字典追加键值对覆盖旧数据问题修复

问题根因

原add2db.py存在两个逻辑问题导致历史数据被覆盖:

  • 每次脚本启动都直接初始化空字典passDB = {},没有加载之前已经存储的历史数据
  • 写入文件时使用wb(覆盖写)模式,仅包含单条新数据的字典会直接替换掉整个旧的存储文件
修改方案

调整add2db.py执行逻辑:脚本启动时优先读取已存在的密码库文件,仅当首次运行无存储文件时才初始化空字典,新增账号密码条目后再将完整字典写回文件,即可保留所有历史存储数据。

修改后可直接使用的add2db.py代码

import pickle
import os

DB_FILE = "passDB.p"

# 加载历史存储数据
if os.path.exists(DB_FILE):
    with open(DB_FILE, "rb") as f:
        passDB = pickle.load(f)
else:
    passDB = {}

# 录入新条目,邮箱统一转小写匹配查询逻辑
email = input("Email: ").lower()
pwd = input("Password: ")
passDB[email] = pwd

# 写回更新后的完整数据库
with open(DB_FILE, "wb") as f:
    pickle.dump(passDB, f)
可选优化

原有passman.py的查询逻辑可以正常工作,仅建议把文件读写改为with上下文管理器写法,自动处理文件关闭,避免资源泄漏,优化后代码如下:

import pickle

DB_FILE = "passDB.p"
with open(DB_FILE, "rb") as f:
    passDB = pickle.load(f)

query = input("Search your email account to get password: ").lower()
print(passDB.get(query, "Nothing such email in database"))

内容的提问来源于stack exchange,提问作者Sayem Billah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:45:49