Python 读取分号分隔的 CSV 文件:值过多无法解包
我正在尝试读取一个从微软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)