Python2.7:要解包的值太多 - 列数未知

Posted

技术标签:

【中文标题】Python2.7:要解包的值太多 - 列数未知【英文标题】:Python2.7: Too many Values to Unpack - Number of Columns unknown 【发布时间】:2014-12-01 10:25:14 【问题描述】:

我有一个文件,我想解压并利用不同文件中的列。我遇到的问题是,我要解压的文件在其列数上因行而异(例如,第 1 行可能有 7 列,第 2 行可能有 15 列)。

如何解压文件而不收到错误“Too many values to unpack”?

filehandle3 = open ('output_steps.txt', 'r')
filehandle4 = open ('head_cluster.txt', 'w')
for line in iter(filehandle3):
    id, category = line.strip('\n').split('\t')
    filehandle4.write(id + "\t" + category + "\n")
filehandle3.close()
filehandle4.close()

任何帮助都会很棒。谢谢!

【问题讨论】:

在python中使用*和**功能..refer this 【参考方案1】:

您应该单独提取值(如果存在),例如像这样:

for line in iter(filehandle3):
    values = line.strip('\n').split('\t')
    id       = values[0] if len(values) > 0 else None
    category = values[1] if len(values) > 1 else None
    ...

您也可以为此创建一个辅助函数:

def safe_get(values, index, default=None):
    return values[index] if len(values) > index else default

或使用try/except:

def safe_get(values, index, default=None):
    try:
        return values[index]
    except IndexError:
        return default

并像这样使用它:

    category = safe_get(values, 1)

在 Python 3 中,如果行总是至少包含所需数量的元素,则可以使用

for line in iter(filehandle3):
    id, category, *junk = line.strip('\n').split('\t')

这会将第一个元素绑定到id,第二个绑定到category,其余的绑定到junk

【讨论】:

以上是关于Python2.7:要解包的值太多 - 列数未知的主要内容,如果未能解决你的问题,请参考以下文章

在训练 Bert 二进制分类模型时,Huggingface 变形金刚返回“ValueError:要解包的值太多(预期为 2)”

ValueError:解包的值太多(Python 2.7)

ValueError:使用 Sage 绘图时“解包的值太多”

Makemigrations ValueError:解包的值太多

OpenCV python:ValueError:解包的值太多

Python:解包的值太多(字典)