Python将文本文件转换为字典时如何跳过格式异常的行
解决方案
运行时报ValueError: too many values to unpack (expected 2)的核心原因是部分行按空白符分割后得到的元素数量不等于2,无法对应k、v两个变量。要实现自动跳过异常行的功能,修改后的代码如下:
# 建议用with上下文管理器自动管理文件资源,无需手动调用close with open("C:\\path\\words.txt", 'r', encoding="utf-8") as f: res_dict = {} for line in f: line = line.strip() # 跳过空行 if not line: continue parts = line.split() # 仅处理分割后刚好为2个元素的正常行,其余行直接跳过 if len(parts) == 2: k, v = parts res_dict[k.strip()] = v.strip()
关键修改说明
- 先将每行分割后的结果存入
parts变量,通过len(parts) == 2判断行格式是否符合要求,不符合就直接跳过,不会触发解包报错 - 新增了空行判断逻辑,避免空行也被当成异常行占用处理资源
- 不要使用
dict作为自定义变量名,避免覆盖Python内置的dict关键字导致后续调用字典相关功能时出现异常
如果需要统计跳过的异常行数量,可以扩展为以下版本:
with open("C:\\path\\words.txt", 'r', encoding="utf-8") as f: res_dict = {} skip_count = 0 for line in f: line = line.strip() if not line: continue parts = line.split() if len(parts) == 2: k, v = parts res_dict[k.strip()] = v.strip() else: skip_count += 1 print(f"共跳过{skip_count}行格式异常的内容")
内容的提问来源于stack exchange,提问作者johnnydoe
相关产品推荐
相关产品推荐

