基于字典键创建多文本文件时遇仅最后键写入所有文件的问题
问题分析
你的代码核心问题是循环嵌套逻辑错误,导致每个文件被重复覆盖写入:
- 外层while循环会执行9次(count从1到9),每次循环里又遍历整个字典的所有键
- 每次打开文件用的是
'w'(写入模式),这个模式会清空文件原有内容再写入,所以每个文件最后只会保留字典最后一个键的内容 - 同时while循环的条件
count <= len(signals_dict)会多生成一个signal9.txt(因为字典长度是8,count会到9)
修正方案
直接遍历字典的键,为每个键生成对应的文件即可,不需要额外的count循环:
signals_dict = {'Signal 1': 1, 'Signal 2': 1, 'Signal 3': 1, 'Signal 4': 1, 'Signal 5': 1, 'Signal 6': 1, 'Signal 7': 1, 'Signal 8': 1} def to_string(): # 遍历字典的每个键,用枚举生成从1开始的序号 for idx, key in enumerate(signals_dict.keys(), start=1): with open(f'signal{idx}.txt', 'w') as wf: wf.write(key) to_string()
如果要严格对应键名里的数字(比如"Signal 1"对应signal1.txt),也可以从键中提取数字:
def to_string(): for key in signals_dict.keys(): # 从键名中拆分出数字部分 num = key.split()[-1] with open(f'signal{num}.txt', 'w') as wf: wf.write(key)
这样每个文件会写入对应的键,不会被覆盖。
内容的提问来源于stack exchange,提问作者CUI
相关产品推荐
相关产品推荐

