2017-12-06 10 views
0

私は特定の方法でファイルとディレクトリをソートしようとしています(それはusuallですが、okです)。だから私は、JPGファイル、その後、いくつかのtxtファイルやwavファイルを持っていると私はそれが私が何かやろうとしているときにすべてのファイルが、その後ディレクトリを並べ替えるが、名前の最初の並べ替えのようにソートしたいいくつかのディレクトリがあります。ファイルをソートしてディレクトリを並べ替えるos.listdir PYTHON

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

コードを

['10000100.JPG'、 '10000102.JPG'、 '10000103.JPG'、 '10000103.JPG'、 '10000104.BMP'、 'BACKUP.BIN'、 'DEPOSIT.BIN' 、 'HRYS'、 'WAVファイル'、 'k.txt'、 's.wav']

それがあるべきである。

[ '10000100.JPG'、 '10000101.JPG'、「100001 02.JPG、10000103.JPG、10000104.BMP、BACKUP.BIN、DEPOSIT.BIN、k.txt、s.wav、HRYS、WAVS]

どのように適切な方法でそれを行うには?

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

キーがbool返すタプル、最初の項目はos.path.isdir(x)で、次のとおりです。

+0

することができます '印刷([(os.path.isdir(x)は、x)のためのxのARR])' ' –

+0

[(偽、 '10000100.JPG')、(「10000101、偽。 JPG ')、(False、' 10000102.JPG ')、(False、' 10000103.JPG ')、(False、' 10000104.BMP ')、(False、' BACKUP.BIN ')、(False、' DEPOSIT。 – BengBeng

+0

それでは、それは '' ''、 ''、 ''、 ''、 ''、 HRYSとWAVSは*ディレクトリではありません*。 –

答えて

3

まあ、最も簡単な方法は、あなたが使用することができ、適切なkeyを提供することで、そう。

EDIT:だから、この作品を確実にする、ん:

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

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

が、より有用DirEntryオブジェクトを返す、os.scandirを使用する方が簡単かもしれません。

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

私はこの行を使用しますが、前と同じ出力が得られます – BengBeng

+0

@BengBeng実際の出力と使用している正確なコードを表示できますか? –

+0

私は質問を更新しました:) – BengBeng

関連する問題