字典增删后写入文本文件仅保留新键?求原格式完整写入方法
问题分析与修正方案
我来帮你梳理下代码里的几个关键问题,正是这些小疏漏导致写入文件时只保留了新添加的条目,而不是完整的更新后字典:
1. 函数作用域与变量误用
addName函数的参数是names,但你在函数里一直用全局变量name,这会导致函数无法正确操作传入的字典;Write_back_into_file的参数是diction,但函数内部却用了全局的name,完全没用到传入的更新后字典,这直接导致写入的不是你修改后的内容;- 变量拼写错误:
new_plant_info应该是new_name_info,new_names_dict应该是new_name_dict,这些拼写错误会导致代码运行报错或逻辑异常; - 判断逻辑错误:
elif answer not in [name]完全不对,应该是判断answer not in names(检查名字是否已存在于字典的键中)。
2. 文件写入格式错误
原文件的格式是一行一条记录,格式为Name 时间 字符串1 字符串2 字符串3,但你的写入代码把名字和信息分成了两行,而且信息之间没有空格,既不符合原格式,也会导致内容混乱。
修正后的完整代码
import datetime # 初始字典(示例) name = { 'First Name': ['2018-11-05 10:12:15', 'First string', 'Second String', 'Third String'], 'Second Name': ['2014-01-02 14:21:11', 'First string', 'Second string', 'Third string'] } def addName(names): print("Adding to name list") while True: answer = input("Enter name to add or <ENTER> to exit: ") if answer == "": print("Exiting Add Names") break if answer in names: print("Name already exists") continue # 获取用户输入的信息,按空格拆分(对应原格式的多个字符串) new_name_info = input("Enter name info (separated by spaces): ").split() # 生成当前时间字符串 current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 构造新条目:时间 + 用户输入的多个字符串 names[answer] = [current_time] + new_name_info print("Add new name info successful.") def Write_back_into_file(diction): print("Writing it back and exiting") with open("filename", "w") as file: # 遍历字典的每个键值对,按原格式写入 for key, values in diction.items(): # 把名字、时间、各个字符串用空格连接成一行 line = f"{key} {' '.join(values)}\n" file.write(line) # 示例调用 addName(name) Write_back_into_file(name)
关键修复点说明
- 统一使用函数参数操作字典,避免全局变量的误用,确保修改的是正确的字典实例;
- 修正了变量拼写和判断逻辑,保证添加条目的逻辑正常运行;
- 按照原文件格式拼接每行内容:
名字 + 空格 + 时间 + 空格 + 各个字符串,确保写入的文件和原格式完全一致; - 调整了
addName的循环逻辑,用户可以连续添加多个条目,直到按回车退出。
内容的提问来源于stack exchange,提问作者J01
相关产品推荐
相关产品推荐

