You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

读取多行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:40:21