os.listdir排序混乱

os.listdir(os.path.join(path, ‘images’)):


问题描述:

提示:这里描述项目中遇到的问题:
os.listdir()排序是随机的

    rgb = []
    deep = []
    for i in os.listdir(os.path.join(path, 'images')):
        for j in os.listdir(os.path.join(path, 'images', i)):
            for k in os.listdir(os.path.join(path, 'images', i, j)):
                if k.find('RGB.jpg') != -1:
                    img = Image.open(os.path.join(path, 'images', i, j, k))
                    img = img.resize((224, 224))
                    rgb.append(np.array(img))
                elif k.find('Deep.jpg') != -1:
                    img = Image.open(os.path.join(path, 'images', i, j, k))
                    img = img.resize((224, 224))
                    img = np.array(img)
                    img = img[:, :, np.newaxis]
                    deep.append(img)
    q_input = np.array(q_list)
    a_output = np.array(a_list)
    rgb_input = np.array(rgb)
    deep_input = np.array(deep)

原因分析:

debug才发现。。。难受

解决方案:

    rgb = []
    deep = []
    path1 = os.listdir(os.path.join(path, 'images'))
    path1.sort(key=lambda x:int(x.split('.')[0]))
    for i in path1:
        path2 = os.listdir(os.path.join(path, 'images', i))
        path2.sort(key=lambda x:int(x.split('.')[0]))
        for j in path2:
            path3 = os.listdir(os.path.join(path, 'images', i, j))
            for k in path3:
                if k.find('RGB.jpg') != -1:
                    # img = Image.open(os.path.join(path, 'images', i, j, k))
                    # img = img.resize((224, 224))
                    #
                    # #img = np.array(img)
                    # img = np.asarray(img) / 255.0
                    # rgb.append(img)
                    pa = os.path.join(path, 'images', i, j, k)
                    img = image.load_img(pa, target_size=(224, 224))
                    img = image.img_to_array(img)
                    img = img / 255.0
                    rgb.append(img)

参考:https://blog.csdn.net/qq_41573001/article/details/108368942

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Python的sorted函数对os.listdir返回的文件列表进行排序,如下所示: ```python import os path = '/path/to/directory' # 获取目录下的文件列表 files = os.listdir(path) # 对文件列表进行排序 sorted_files = sorted(files) print(sorted_files) ``` 默认情况下,sorted函数按字母顺序对文件名进行排序。如果要按其他方式排序,可以使用sorted函数的关键字参数key。例如,以下代码按文件大小对文件进行排序: ```python import os path = '/path/to/directory' # 获取目录下的文件列表 files = os.listdir(path) # 对文件列表按文件大小进行排序 sorted_files = sorted(files, key=lambda filename: os.stat(os.path.join(path, filename)).st_size) print(sorted_files) ``` 这里的lambda表达式使用os.stat函数获取文件的元数据,然后返回文件大小作为关键字用于排序。请注意,os.stat函数需要传递文件的完整路径,因此我们使用os.path.join函数将目录路径和文件名拼接起来。 ### 回答2: Python os.listdir函数可以用于获取特定目录下的文件名列表。它可以返回一个包含文件名的列表,并支持基于一些标准对列表进行排序排序的方法是传递函数参数,通过这个函数参数可以指定如何排序列表。os.listdir函数返回的是一个未排序的列表,我们可以调用内置的sorted函数或列表的sort方法来对它们进行排序。这里推荐使用sorted函数。 sorted函数接受一个可迭代对象并返回一个新的排序列表。我们可以在sorted函数的第一个参数中传递os.listdir函数返回的列表,然后使用key参数指定排序的标准。key参数允许我们传递一个函数,这个函数将在排序过程中用于比较元素。 下面是一个示例: ```python import os # 获取目录下所有文件名 files = os.listdir('/path/to/directory') # 按照文件名进行升序排序 sorted_files = sorted(files) # 按照文件名长度进行升序排序 sorted_files_by_length = sorted(files, key=lambda x: len(x)) # 按照文件名后缀进行降序排序 sorted_files_by_ext = sorted(files, key=lambda x: x.split('.')[-1], reverse=True) ``` 在上面的例子中,sorted_files通过简单地调用sorted函数来获得一个按文件名排序的新列表。sorted_files_by_length通过使用lambda函数来传递一个比较文件名长度的函数进行排序。sorted_files_by_ext通过使用lambda函数来传递一个比较文件名后缀的函数来排序,由于我们想要降序排序,所以使用了reverse参数。 总结一下,Python os.listdir函数的排序取决于传递给sorted函数的函数参数。我们可以根据自己的需求来定义这些函数,以便按特定标准对文件名列表进行排序。 ### 回答3: Python的os模块提供了丰富的文件和目录操作功能,其中os.listdir()函数可以列出指定目录下的所有文件和子目录。 但是,由于os.listdir()函数返回的文件列表是按照操作系统默认排序方式排列的(Windows为字母顺序,Unix为文件大小和修改日期),当我们需要按照自定义的规则排序时,需要进行一些额外的处理。 下面介绍几种常见的os.listdir()排序方法: 1. sort()函数排序 首先,我们可以通过sort()函数对列表进行排序,该方法使用内置的Python比较函数来按照指定的规则进行排序。 例如,以下代码按照文件名首字母的升序排序: ```python import os path = '/path/to/directory' files = os.listdir(path) files.sort() print(files) ``` 需要注意的是,如果要按照其他规则排序,可以通过将自定义的比较函数传递给sort()方法来实现。 2. sorted()函数排序 除了sort()方法之外,我们还可以使用内置的sorted()函数对文件列表进行排序。sorted()函数返回一个新的列表,而不是在原始列表上进行原地排序。 例如,以下代码按照文件名的长度进行逆序排序: ```python import os path = '/path/to/directory' files = os.listdir(path) files_sorted = sorted(files, key=lambda x: len(x), reverse=True) print(files_sorted) ``` 需要注意的是,我们可以通过key参数传递任何自定义的排序函数,例如按照文件大小或修改日期排序。 3. 自定义排序函数 最后,我们可以编写自定义的排序函数,并将其传递给sort()或sorted()函数来实现自定义排序规则。 例如,以下代码按照文件的修改日期进行逆序排序: ```python import os import datetime def get_file_mtime(path): """获取文件的修改时间""" mtime = os.path.getmtime(path) return datetime.datetime.fromtimestamp(mtime) path = '/path/to/directory' files = os.listdir(path) files_sorted = sorted(files, key=lambda x: get_file_mtime(os.path.join(path, x)), reverse=True) print(files_sorted) ``` 在这个例子中,我们定义了一个名为get_file_mtime()的辅助函数,该函数接收文件路径作为参数,并返回文件的修改日期。我们将该函数作为key参数传递给sorted()函数,以便按照修改日期排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值