我试图读取从Microsoft 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;;
Run Code Online (Sandbox Code Playgroud)
分隔符是分号,有些列可能是空的.例如,可以填充列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)
Run Code Online (Sandbox Code Playgroud)
我收到了错误ValueError: too many values to unpack.我在这做错了什么?
CSV文件的每一行都有10个分号,表示该行将被拆分为11个元素.在for循环中,只使用了10个变量.将行更改为:
for x, y, z, safe, mod, descr_node, name, start, end, descr_path, _ in reader:
Run Code Online (Sandbox Code Playgroud)
并忽略_变量,它将获得;行中最后一行和行尾之间的空字符.
或者将整个循环更改为:
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)
Run Code Online (Sandbox Code Playgroud)