Python 尝试获取多个目录的值时出现太多值无法解压缩(预期为2)错误

Python 尝试获取多个目录的值时出现太多值无法解压缩(预期为2)错误,python,python-3.x,Python,Python 3.x,我必须同时访问2个目录,并且必须处理这样的文件-如果我处理第一个目录中的第一个文件,那么我必须处理第二个目录中的第一个文件,依此类推。但当我看到代码时: for n, id_ in tqdm(enumerate(train_ids), total=len(train_ids)): path = TRAIN_PATH +'\\'+ id_ path_image = path + '\\images\\' path_mask = path + '\\masks\\'

我必须同时访问2个目录,并且必须处理这样的文件-如果我处理第一个目录中的第一个文件,那么我必须处理第二个目录中的第一个文件,依此类推。但当我看到代码时:

for n, id_ in tqdm(enumerate(train_ids), total=len(train_ids)):
    path = TRAIN_PATH +'\\'+ id_
    path_image = path + '\\images\\'
    path_mask = path + '\\masks\\'
    for image_file, mask_file in os.listdir(path_image), os.listdir(path_mask):
        print(path_image+image_file)
        print(path_mask+mask_file)

ValueError                                Traceback (most recent call last)
<ipython-input-22-b54928a597d2> in <module>
      3     path_image = path + '\\images\\'
      4     path_mask = path + '\\masks\\'
----> 5     for image_file, mask_file in os.listdir(path_image), os.listdir(path_mask):
      6         print(path_image+image_file)
      7         print(path_mask+mask_file)

ValueError: too many values to unpack (expected 2)
tqdm中的n,id(枚举(列id),总计=len(列id))

路径=列车路径+'\\'+id_
路径\图像=路径+'\\images\\'
路径\掩码=路径+'\\masks\\'
对于图像\文件,请在os.listdir(路径\图像)和os.listdir(路径\掩码)中屏蔽\文件:
打印(路径\图像+图像\文件)
打印(路径\掩码+掩码\文件)
ValueError回溯(最近一次调用上次)
在里面
3路径\图像=路径+'\\images\\'
4路径\u掩码=路径+'\\masks\\'
---->5对于映像\u文件,在os.listdir(路径\u映像)和os.listdir(路径\u掩码)中屏蔽\u文件:
6打印(路径\图像+图像\文件)
7打印(路径屏蔽+屏蔽文件)
ValueError:要解压缩的值太多(应为2个)

您可以使用
zip
功能解决此类问题

改变

对于image\u文件,在os.listdir(path\u image)和os.listdir(path\u mask)中屏蔽文件:
进入:

对于图像\文件,zip中的掩码\文件(os.listdir(路径\图像),os.listdir(路径\掩码)):
说明:
zip
将两个(或更多)iterables合并为一个:

假设我们有list
l
k

k=[1,2,3]
l=[4,5,6]
zip(l,k)#[(1,4)、(2,5)、(3,6)]
您的“for循环”方法不正确。请参见下面的示例

由于面的原因,您无法将2个列表解压为两个变量-它们的长度可能不同,然后python将不知道如何处理“for语句”

ValueError:要解压缩的值太多(应为2个)

您需要创建一个可迭代的对象


使用@Reznik offer,它会完成工作。

如果我做对了,你想同时迭代两个iterable(
os.listdir(path\u image)
os.listdir(path\u mask)

对于表达式,不能在同一个
中解压两个类似列表的对象。但是您可以通过使用来实现这一点


zip
允许您同时迭代两个(或更多)类似iterables的列表。

您能粘贴完整的错误代码吗?@keiv.fly忘记添加错误代码了。thnx Mate但是它改变了文件的顺序,我不想that@Nemesis什么意思?什么顺序得到改变?我已经根据修改的日期对文件进行了排序,但它是根据name@Nemesis您可以将
os.listdir(path\u image)
提取到varible中,对其进行修改,然后将其放入
zip
文件中
    a = [1, 2, 3]
    b = [4, 5, 6]

    for z, x in a, b:
        print(z)
        print(x)
for image_file, mask_file in zip(os.listdir(path_image), os.listdir(path_mask)):
   ...