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

pyC*_*hon 1 python python-2.7

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

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

import glob    
for a, b in (glob.glob("*a.csv"), glob.glob("*b.csv")):
Run Code Online (Sandbox Code Playgroud)

我收到错误:

ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)

Dav*_*ber 6

问题

你得到的是ValueError因为你试图为元组分配的项目多于你提供的目标变量的数量.for循环元组解包语法将循环遍历元组中的每个列表,并尝试将元组中的每个值分配给目标(ab).例如,这可以工作:

for a,b in (['0a.csv', '1a.csv'], ['0b.csv', '1b.csv']):
    print a,b
Run Code Online (Sandbox Code Playgroud)

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

0a,csv 1a.csv
0b.csv 1b.csv
Run Code Online (Sandbox Code Playgroud)

因此,您得到的是ValueError因为至少有一个glob.glob调用的结果是一个长于两个元素的列表.

一个办法

根据你想要做的事情,我想你想用zip.

import glob

for a,b in zip(glob.glob("*a.csv"), glob.glob("*b.csv")):
    # whatever
Run Code Online (Sandbox Code Playgroud)

这将采用与您提供的模式匹配的成对文件,并将它们分配给ab.举例来说,如果你有文件0a.csv,1a.csv,2a.csv,0b.csv,1b.csv,和2b.csv

for a,b in zip(glob.glob("*a.csv"), glob.glob("*b.csv")):
    print a, b
Run Code Online (Sandbox Code Playgroud)

结果是

0a.csv 0b.csv
1a.csv 1b.csv
2a.csv 2b.csv
Run Code Online (Sandbox Code Playgroud)