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

如何正确将Python字典写入文本文件并读取为字典类型

问题原因
  • 打开文件用了a+追加模式,每次运行都会把当前字典转成字符串直接拼到文件末尾,多次运行自然会出现多个字典首尾相连的无效内容,根本没法解析。
  • 直接用str()把字典转成字符串写入,本身就不是标准的结构化存储格式,读出来当然是字符串类型,没法直接当字典用。之前用json.dump报序列化错误,是因为你传入的参数是未调用的方法对象(比如漏写括号的mydic.keys、mydic.items),不是普通字典本身,只要传对参数就不会有这个问题。
正确实现方法

优先用JSON做序列化,跨语言兼容、安全性高,是这类场景的标准方案:

  1. 程序启动时先判断存储文件是否存在,存在就读取已有内容反序列化为字典,不存在就初始化空字典
  2. 新录入的内容直接更新到这个已加载的字典里
  3. 写入的时候用w覆盖模式,把完整字典通过json.dump序列化后写入,不要用追加模式
  4. 读取的时候直接用json.load就能拿到原生字典类型,不需要手动做类型转换

对应可直接运行的代码:

import json
import os

FILE_PATH = "cd.txt" # 存成txt或者json后缀都可以

# 加载已有数据
if os.path.exists(FILE_PATH):
    with open(FILE_PATH, "r", encoding="utf-8") as f:
        # 处理文件为空/损坏的边界情况
        try:
            user_dict = json.load(f)
        except json.JSONDecodeError:
            user_dict = {}
else:
    user_dict = {}

# 录入新数据
for _ in range(3):
    uname = input("enter uname:\n")
    pwd = input("enter pwd:\n")
    user_dict[uname] = pwd

print(f"合并后完整字典:{user_dict}")

# 全量覆盖写入
with open(FILE_PATH, "w", encoding="utf-8") as f:
    json.dump(user_dict, f, ensure_ascii=False, indent=4)

# 读取验证
with open(FILE_PATH, "r", encoding="utf-8") as f:
    loaded_data = json.load(f)
    print(f"读取结果:{loaded_data},数据类型:{type(loaded_data)}")

补充说明:如果非要存字典的字符串形式,绝对不要用内置eval()做转换,会有执行任意恶意代码的风险,可使用ast.literal_eval()做安全转换,但这种方式兼容性、通用性都远不如JSON,不推荐使用。

多次运行程序后,文件内只会存储单个合法的JSON结构,不会再出现字典拼接的问题,读取后直接可以当字典使用,不会出现字符串类型的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:01:06