Ben*_*eng 2 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)
Run Code Online (Sandbox Code Playgroud)
代码给了我输出:
['10000100.JPG', '10000101.JPG', '10000102.JPG', '10000103.JPG', '10000104.BMP', 'BACKUP.BIN', 'DEPOSIT.BIN', 'HRYS', 'WAVS', 'k.txt', 's.wav']
Run Code Online (Sandbox Code Playgroud)
但应该是:
['10000100.JPG', '10000101.JPG', '10000102.JPG', '10000103.JPG', '10000104.BMP', 'BACKUP.BIN', 'DEPOSIT.BIN', 'k.txt', 's.wav', 'HRYS', 'WAVS']
Run Code Online (Sandbox Code Playgroud)
如何以正确的方式去做?
好吧,最直接的方法是提供一个合适的key
,因此,您可以使用:
arr.sort(key=lambda x: (os.path.isdir(x), x))
Run Code Online (Sandbox Code Playgroud)
键是一个元组,第一项是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))
Run Code Online (Sandbox Code Playgroud)
尽管如此,它可能更容易使用os.scandir
,它返回更有用的DirEntry
对象。
arr = sorted(os.scandir(), key=lambda x: (x.is_dir(), x.name))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4586 次 |
最近记录: |