spflmm 发表于 2023-5-24 14:12:44

代码执行后输出的顺序跟文件夹里的顺序不一致

import torch
import glob
import os
all_pics = glob.glob('/Users/spf/PycharmProjects/pythonProject/hk/training/*.png')
print(all_pics[:4])

结果显示为
['/Users/spf/PycharmProjects/pythonProject/hk/training/00377_matte.png',
'/Users/spf/PycharmProjects/pythonProject/hk/training/00694_matte.png',
'/Users/spf/PycharmProjects/pythonProject/hk/training/00481.png',
'/Users/spf/PycharmProjects/pythonProject/hk/training/00970_matte.png']

但文件见里面的顺序是:
['/Users/spf/PycharmProjects/pythonProject/hk/training/0001.png',
'/Users/spf/PycharmProjects/pythonProject/hk/training/0001_matte.png',
'/Users/spf/PycharmProjects/pythonProject/hk/training/0002.png',
'/Users/spf/PycharmProjects/pythonProject/hk/training/0002_matte.png']

请大神指点,为什么代码执行后输出的顺序跟文件夹里的顺序不一致呢?谢谢

isdkz 发表于 2023-5-24 14:27:21

glob.glob 函数返回的文件列表是按照文件名的字母顺序排序的,而不是按照你在文件系统中看到的顺序。在许多文件系统中,文件排序基于文件名的数值,这可能是你看到的文件夹里的顺序。

如果你想按照文件名的数字顺序获取文件,你可以使用一些额外的代码对文件名进行排序。在这个例子中,你可以先获取文件名的数字部分,然后按照这个数字排序。以下是一个可能的解决方案:

import glob
import os
import re

all_pics = glob.glob('/Users/spf/PycharmProjects/pythonProject/hk/training/*.png')

def sort_key(s):
    return int(re.findall(r'\d+', os.path.basename(s)))

all_pics.sort(key=sort_key)

print(all_pics[:4])


在这个代码中, sort_key 函数用于获取文件名中的数字部分,并将其转换为整数。然后,我们使用这个函数作为排序的关键字,以确保文件按照我们希望的顺序排序。
页: [1]
查看完整版本: 代码执行后输出的顺序跟文件夹里的顺序不一致