Pythonのディレクトリでファイルを並べ替える簡単な方法はありますか?私が考えているファイルは、
file_01_001
file_01_005
...
file_02_002
file_02_006
...
file_03_003
file_03_007
...
file_04_004
file_04_008
私が欲しいのは
file_01_001
file_02_002
file_03_003
file_04_004
file_01_005
file_02_006
...
現在、次のようにディレクトリにglob
を使用してそれらを開いています。
for filename in glob(path):
with open(filename,'rb') as thefile:
#Do stuff to each file
したがって、プログラムが目的のタスクを実行している間、ファイルの順序が原因で、一度に複数のファイルを実行すると、誤ったデータが提供されます。何か案は?
前述のように、ディレクトリ内のファイルは特定の方法で本質的にソートされていません。したがって、通常、1)ファイル名を取得します。2)ファイル名を目的のプロパティでソートします。3)ファイルをソート順に処理します。
次のようにして、ディレクトリ内のファイル名を取得できます。ディレクトリが「〜/ home」であるとします
import os
file_list = os.listdir("~/home")
ファイル名を並べ替えるには:
#grab last 4 characters of the file name:
def last_4chars(x):
return(x[-4:])
sorted(file_list, key = last_4chars)
したがって、次のようになります。
In [4]: sorted(file_list, key = last_4chars)
Out[4]:
['file_01_001',
'file_02_002',
'file_03_003',
'file_04_004',
'file_01_005',
'file_02_006',
'file_03_007',
'file_04_008']
それらをソート順に読み込んで処理するには、次のようにします。
file_list = os.listdir("~/home")
for filename in sorted(file_list, key = last_4chars):
with open(filename,'rb') as thefile:
#Do stuff to each file
より良い解決策は、Tclの「lsort -dictionary」を使用することです。
from tkinter import Tcl
Tcl().call('lsort', '-dict', file_list)
Tcl辞書の並べ替えは数値を正しく処理し、ファイルマネージャーがファイルの並べ替えに使用するものと同様の結果を取得します。