读取多行TXT到字典报错:字典更新序列长度不符
多行文本转字典并生成DataFrame的解决方案
问题场景
需要遍历多行TXT文件,将每行内容转为字典后追加到DataFrame,但原代码仅支持单行处理,多行时触发报错:
dictionary update sequence element #6 has length 3; 2 is required
TXT文件示例
ABC=123, DEF="456", ABC="789", DEF="101112"
期望结果
每行转为字典:
{"ABC": "123", "DEF": "456"} {"ABC": "789", "DEF": "101112"}
最终生成的DataFrame:
ABC DEF 0 123 456 1 789 101112
原错误代码
with open("file.txt", "r") as f: s = f.read().strip() dictionary = dict(subString.split("=") for subString in s.split(",")) dataframe = dataframe.append(dictionary, ignore_index=True) dataframe
解决方案
原代码的问题在于一次性读取所有内容后直接分割,会把换行、多余空格、末尾逗号都混入处理,导致分割出无效键值对。以下是两种修正方案:
方案1:逐行处理并追加
import pandas as pd # 初始化空DataFrame df = pd.DataFrame(columns=["ABC", "DEF"]) with open("file.txt", "r") as f: for line in f: # 清理行首尾空格、换行,去掉末尾多余的逗号 cleaned_line = line.strip().rstrip(",") if not cleaned_line: continue # 跳过空行 # 分割成键值对列表并清理空格 kv_pairs = [pair.strip() for pair in cleaned_line.split(",")] # 处理每个键值对,去掉值的引号后生成字典 row_dict = {} for pair in kv_pairs: key, value = pair.split("=") row_dict[key] = value.strip('"') # 追加到DataFrame df = df.append(row_dict, ignore_index=True) print(df)
方案2:批量收集字典后生成DataFrame(更高效)
import pandas as pd rows = [] with open("file.txt", "r") as f: for line in f: cleaned_line = line.strip().rstrip(",") if not cleaned_line: continue kv_pairs = [pair.strip() for pair in cleaned_line.split(",")] row_dict = {} for pair in kv_pairs: key, value = pair.split("=") row_dict[key] = value.strip('"') rows.append(row_dict) # 一次性生成DataFrame df = pd.DataFrame(rows) print(df)
错误原因解释
原代码f.read().strip()会把所有行内容合并成一个字符串,示例内容会变成"ABC=123, DEF=\"456\", ABC=\"789\", DEF=\"101112\"",用split(",")分割后会出现['ABC=123', ' DEF="456"', ' ', ' ABC="789"', ' DEF="101112"']这类元素,其中第三个是空字符串,执行split("=")后得到长度为1的列表,不符合字典键值对需要的长度要求,因此触发报错。
内容的提问来源于stack exchange,提问作者Uche24
相关产品推荐
相关产品推荐

