排序文件然后目录os.listdir PYTHON

时间:2017-12-06 08:08:34

标签: python sorting directory alphabetical listdir

我试图以特定的方式对文件和目录进行排序(对我而言,这是通常的方式,但确定)。所以我有JPG文件,然后是一些txt文件或wav,我有一些目录,我希望它排序,如第一次按名称排序所有文件然后排序目录,但当我尝试做类似的事情:

    path = "/my_path"
    arr = os.listdir(path)
    arr.sort(key=lambda x: (os.path.isdir(x), x))
    print(arr)

代码给我输出:

[' 10000100.JPG',' 10000101.JPG',' 10000102.JPG',' 10000103.JPG',&# 39; 10000104.BMP',' BACKUP.BIN',' DEPOSIT.BIN',' HRYS',' WAVS',& #39; k.txt',' s.wav']

但它应该是:

[' 10000100.JPG',' 10000101.JPG',' 10000102.JPG',' 10000103.JPG',&# 39; 10000104.BMP',' BACKUP.BIN',' DEPOSIT.BIN',' k.txt',' s.wav&# 39;,' HRYS',' WAVS']

如何以正确的方式做到这一点?

1 个答案:

答案 0 :(得分:3)

嗯,最直接的方法是提供适当的key,所以你可以使用:

arr.sort(key=lambda x: (os.path.isdir(x), x))

密钥是元组,第一项是os.path.isdir(x),返回bool

编辑:所以,为了使确定这个有效,请执行:

def isdir(path, x):
    path = os.path.join(path, x)
    return os.path.isdir(path)

arr.sort(key=lambda x: (isdir(path, x), x))

尽管如此,使用os.scandir可能更容易,它会返回更有用的DirEntry个对象。

arr = sorted(os.scandir(), key=lambda x: (x.is_dir(), x.name))