使用csv.reader+itertools读取txt生成嵌套列表字典返回空字典问题
代码错误点
- 变量名拼写错误:函数参数传入的是文件路径,但
open()里用了不存在的变量filnamn;读取动物名称时调用了不存在的变量rader,应该是rows。 - 分隔符配置错误:你提供的样例txt中Pig的日期和体重用两个空格分隔,不是制表符
\t,但csv.reader指定了delimiter="\t",导致所有行读取后都只有1个元素,itertools.groupby的分组判断len(row) == 1全为True,永远不会进入存储数据的else分支,最终返回空字典。 - 变量命名冲突:函数参数名和
with open语句里的文件对象都叫file,会覆盖传入的文件路径参数。 - 未处理缺失体重的行:Bear对应的行只有日期没有体重,原始代码会直接把单行字符串存进去,不符合你要求的
[日期, 体重]格式。 - 逻辑漏洞:如果最后一组是动物名称没有对应数据,或者
del animal后下一组还没赋值新的动物名,会触发变量未定义报错。
修正后可用代码
def readanimal(file_path): animal_map = {} current_animal = None with open(file_path, encoding="utf-8") as f: for line in f: line = line.strip() # 跳过空行 if not line: continue # 没有空格/制表符的行判定为动物名称 if ' ' not in line and '\t' not in line: current_animal = line animal_map[current_animal] = [] continue # 拆分日期和体重,自动适配空格/制表符分隔 parts = line.split() date = parts[0] weight = parts[1] if len(parts) >= 2 else None animal_map[current_animal].append([date, weight]) return animal_map
运行print(readanimal("filename.txt"))即可返回你需要的格式字典。
内容的提问来源于stack exchange,提问作者dacritical
相关产品推荐
相关产品推荐

