Python 读取分号分隔的 CSV 文件:值过多无法解包

1 投票
1 回答
2875 浏览
提问于 2025-04-17 15:53

我正在尝试读取一个从微软Excel导出的csv文件,文件内容大概是这样的:

114.9;280.9;501.5;0;W10;Firewall south;A;1;2;;
119.0;280.9;501.5;0;W10;Southern escape route;B;2;3;asdasdf;
120.5;280.0;501.5;0;W10;Southern escape route;C;3;4;;

这个文件的分隔符是分号,并且有些列可能是空的。比如第10列可能会填入一些内容,比如asdasdf。我的代码是这样的:

reader = csv.reader(open(inFile), delimiter=";")

nodesTable = window.getNodesTable()
pathsTable = window.getPathsTable()
clearTable(nodesTable)
clearTable(pathsTable)

for x, y, z, safe, mod, descr_node, name, start, end, descr_path in reader:
    nodesTable.SetStringItem(counter, nodesTable_ID_x, x)
    nodesTable.SetStringItem(counter, nodesTable_ID_y, y)
    nodesTable.SetStringItem(counter, nodesTable_ID_z, z)
    nodesTable.SetStringItem(counter, nodesTable_ID_SafeArea, safe)
    nodesTable.SetStringItem(counter, nodesTable_ID_Module, mod)
    nodesTable.SetStringItem(counter, nodesTable_ID_Description, descr_node)

    pathsTable.SetStringItem(counter, pathsTable_ID_Name, name)
    pathsTable.SetStringItem(counter, pathsTable_ID_StartNode, start)
    pathsTable.SetStringItem(counter, pathsTable_ID_EndNode, end)
    pathsTable.SetStringItem(counter, pathsTable_ID_Description, descr_path)

但是我遇到了一个错误,提示是ValueError: too many values to unpack。我哪里出错了呢?

1 个回答

5

你的CSV文件每一行都有10个分号,这意味着这一行会被分成11个部分。在你的for循环中,只用了10个变量。你可以把这一行改成:

for x, y, z, safe, mod, descr_node, name, start, end, descr_path, _ in reader:

然后忽略_这个变量,它会获取到行末最后一个;和行结束之间的空字符。

或者你可以把整个循环改成:

cols = (nodesTable_ID_x, nodesTable_ID_y, nodesTable_ID_z,
        nodesTable_ID_SafeArea, nodesTable_ID_Module,
        nodesTable_ID_Description, pathsTable_ID_Name,
        pathsTable_ID_StartNode, pathsTable_ID_EndNode,
        pathsTable_ID_Description)

for rec in reader:
    for col, val in zip(cols, rec):
        nodesTable.SetStringItem(counter, col, val)

撰写回答