Python实现解析按空行分组的空格分隔键值对txt并生成两个独立字典
Python按空行拆分键值对生成独立字典的实现方案
现有代码的核心问题
- 缺失分组边界识别逻辑:代码仅初始化了1个全局字典,没有识别空行作为不同字典分组的分隔标记,所有有效键值对会持续累加进同一个字典,无法拆分出独立字典
- 无字典状态重置逻辑:遇到空行时没有将当前已填充的字典存入结果集合,也没有新建空字典承接后续分组的键值对,全程只有单个字典在被修改
- 遍历流程存在遗漏:没有在文件遍历完成后收尾存储最后一组内容,容易出现最后一段内容截断丢失的问题
- 输出逻辑错位:每识别到一个键值对就打印当前字典的中间态,输出的是逐行累加的过程值,不是最终拆分完成的目标字典
- 文件操作不规范:手动调用
open()打开文件没有使用上下文管理器,也没有主动做资源释放,存在文件句柄泄漏的风险
可落地的正确实现
实现逻辑
- 逐行读取文件内容,剥离每行首尾的换行符、多余空格等无效字符
- 遇到空行时,将当前已填充的字典存入最终结果列表,同时重置空字典承接下一组的键值对
- 文件全部遍历完成后,将最后一组未被空行触发的字典补存入结果列表,避免最后一段内容截断
- 拆分完成后即可从结果列表中取出两个独立字典使用
参考代码
# 使用with上下文管理器自动处理文件的打开与关闭,避免资源泄漏 with open("file.txt", "r", encoding="utf-8") as f: all_lines = f.readlines() # 初始化结果存储列表、当前正在填充的空字典 final_dicts = [] current_dict = {} for line in all_lines: # 去除行首尾的换行、空格等无效字符 cleaned_line = line.strip() # 识别空行作为分组触发点 if not cleaned_line: # 只有当前字典有有效内容时才存入结果,避免连续空行产生空字典 if current_dict: final_dicts.append(current_dict) current_dict = {} continue # 拆分有效行的键值对 key, value = cleaned_line.split() current_dict[key] = value # 遍历收尾:把最后一组未遇到空行的字典存入结果,解决内容截断问题 if current_dict: final_dicts.append(current_dict) # 取出两个独立字典使用 target_dict1, target_dict2 = final_dicts print(target_dict1, target_dict2)
运行效果
针对题目给出的示例txt文件,代码输出与预期完全一致:{'value1': 'value10', 'value2': 'value20', 'value3': 'value30'}, {'var1': 'var10', 'var2': 'var20', 'var3': 'var30'}
内容的提问来源于stack exchange,提问作者DisplayYet
相关产品推荐
相关产品推荐

