Python ValueError:用glob解压缩的值太多了

时间:2012-09-25 15:35:22

标签: python python-2.7

我正在尝试加载两组CSV文件并对两者进行一些计算,例如每组差异,平均绝对误差set1 - set2

我正在尝试加载这两个集:

import glob    
for a, b in (glob.glob("*a.csv"), glob.glob("*b.csv")):

我收到错误:

ValueError: too many values to unpack

1 个答案:

答案 0 :(得分:6)

问题

您正在获取ValueError,因为您尝试将更多项目分配给元组而不是您提供的目标变量数量。 for循环元组解包语法将循环遍历元组中的每个列表,并尝试将元组中的每个值分配给目标(ab)。例如,这将起作用:

for a,b in (['0a.csv', '1a.csv'], ['0b.csv', '1b.csv']):
    print a,b

它将每个列表的第一个值分配给a,将第二个值分配给b。上面的代码打印:

0a,csv 1a.csv
0b.csv 1b.csv

因此,您获得的是ValueError,因为至少有一个glob.glob来电的结果是一个长于两个元素的列表。

解决方案

根据您的目的,我想您想使用zip

import glob

for a,b in zip(glob.glob("*a.csv"), glob.glob("*b.csv")):
    # whatever

这将采用与您提供的模式匹配的成对文件,并将其分配给ab。例如,如果您有文件0a.csv1a.csv2a.csv0b.csv1b.csv2b.csv正在执行

for a,b in zip(glob.glob("*a.csv"), glob.glob("*b.csv")):
    print a, b

结果

0a.csv 0b.csv
1a.csv 1b.csv
2a.csv 2b.csv