使用os.listdir()从LFW数据集中读取图像只能从第一个文件夹读取图像

时间:2019-03-26 08:16:11

标签: python dataset readfile

LFW数据集根据名称将图像放在不同的文件夹中。我想读取所有图像并将其移至一个文件夹。我使用带有os.listdir()函数的for循环来读取文件,但它仅返回LFW数据集中第一个文件夹中的图像。

'''code is showing below the line'''

    import os
    from os.path import join as pjoin
    from skimage import io
    img_dir = 'new path'
    def load_data(data_dir): #dataset is the originalPath

        count = 0
        for guys in os.listdir(data_dir):
            print(guys)
            person_dir = pjoin(data_dir, guys)
            for i in os.listdir(person_dir):
                image_dir = pjoin(person_dir, i)
                img22 = io.imread(image_dir, mode='RGB')
                print(image_dir)
                io.imsave(pjoin(img_dir, i), img22)
                count = count+1
            print(person_dir)
            print(count)
            return count

    sourcepath = 'originalPath'
    load_data(sourcepath)

预期结果是将LFW数据集的所有文件夹中的所有图像读取到新路径(不在任何文件夹中,仅图像)。 代码运行没有错误,但是计数实际上返回了“ 1”,我可以在新路径中看到只有1张图像,它位于LFW数据集的第一个文件夹中。

1 个答案:

答案 0 :(得分:0)

一个明显的问题是您的return语句缩进:

'''code is showing below the line'''

    import os
    from os.path import join as pjoin
    from skimage import io
    img_dir = 'new path'
    def load_data(data_dir): #dataset is the originalPath

        count = 0
        for guys in os.listdir(data_dir):
            print(guys)
            person_dir = pjoin(data_dir, guys)
            for i in os.listdir(person_dir):
                image_dir = pjoin(person_dir, i)
                img22 = io.imread(image_dir, mode='RGB')
                print(image_dir)
                io.imsave(pjoin(img_dir, i), img22)
                count = count+1
            print(person_dir)
        print(count)
        return count

    sourcepath = 'originalPath'
    load_data(sourcepath)

您可以检查并确认它正在使用的第一个文件夹(家伙)是否包含多个图像。