我试图以特定的方式对文件和目录进行排序(对我而言,这是通常的方式,但确定)。所以我有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']
如何以正确的方式做到这一点?
答案 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))