如何拆分清理TXT文件内容并保存为Python字典?
从TXT文件生成指定格式的字典输出
原始TXT文件内容
Jon, ID1, 30.0, ID2, 35.4, ID3, 478.5 Paige, ID1, 15.8, ID3, 723.5, ID4, 250, ID6, 66.2 Jil, ID1, 46.2, ID2, 37.7, ID3, 68.4, ID4, 40, ID5, 22 Jig5, ID1, 90.5, ID2, 69.4, ID6, 35.8 Kit4, ID3, 700.2, ID4, 260, ID5, 96
期望输出格式
Jon {ID1: 30.0, ID2: 35.4, ID3: 478.5} Paige {ID1: 15.8, ID3: 723.5, ID4: 250, ID6: 66.2} Jil {ID1: 46.2, ID2: 37.7, ID3: 68.4, ID4: 40, ID5: 22} Jig5 {ID1: 90.5, ID2: 69.4, ID6: 35.8} Kit4 {ID3: 700.2, ID4: 260, ID5: 96}
你的代码存在的问题
- 语法错误:
for line in f_in: names = line[0].strip()缩进错误,后续代码未正确嵌套在循环内; - 变量逻辑混乱:
usage未定义就调用usage[1::2].strip(),state、capital等变量无声明却直接使用; - 数据处理错误:
line[0]是取字符串第一个字符,无法正确获取名字,应该先分割行内容再提取第一个元素。
正确实现代码
with open("records.txt", "r") as f_in: for line in f_in: # 清理行首尾空白,按逗号分割后逐个清理元素的空白 parts = [item.strip() for item in line.strip().split(',')] if not parts: continue # 提取名字 name = parts[0] # 构建ID-分数字典 score_dict = {} # 从索引1开始,每两个元素为一组(ID+分数)遍历 for i in range(1, len(parts), 2): if i + 1 >= len(parts): break id_key = parts[i] # 自动转换分数为合适的数值类型 try: score = float(parts[i+1]) # 整数形式的float转成int(如250.0→250) if score.is_integer(): score = int(score) except ValueError: score = parts[i+1] score_dict[id_key] = score # 按指定格式输出 print(f"{name} {score_dict}")
代码说明
- 双层清理:先去掉行首尾的换行/空白,再分割每个元素并清理元素的空白,避免多余空格干扰;
- 分组处理:剩余元素按
ID-分数成对遍历,确保每个ID对应正确的分数; - 类型适配:分数自动转换为
float或int,保证输出格式和示例一致; - 容错处理:防止极端情况下出现无对应分数的ID,避免程序报错。
内容的提问来源于stack exchange,提问作者Sheesh
相关产品推荐
相关产品推荐

