ディレクトリ内のファイルリストを取得する

Pythonであるツールを作っているのだが、カレントディレクトリにあるファイルリストを取得しなければならなくなった。

さて、どうしよう。

Pythonのドキュメントを読むと、globモジュールのglob関数、すなわち、glob.glob関数を使うらしい。

対話モードPythonで実験してみると、

>>> import glob
>>> glob.glob('*') # カレントディレクトリの全ファイルを取得
['c.txt', 'a.txt', 'hello.py', 'Hello.java', 'b.txt']
>>> glob.glob('*.txt') # 特定の拡張子を指定
['c.txt', 'a.txt', 'b.txt']

ファイル名のリストを返します。

ファイル名でソートする

glob.globで返されるリストの順序は、特に決まっていないようです。
そのため、ソートされた結果が欲しい場合は、

>>> sort(glob.glob('*'))
['Hello.java', 'a.txt', 'b.txt', 'c.txt', 'hello.py']

のようにします。

更新日付でソートしたいのだが

Linuxコマンドの「ls -t」のようなことをglob.glob関数でもやってみたい。
しかし、glob.globには「-t」のようなオプションをつけることはできないようです。

というわけで、何か他の方法を考えなければなりません。

os.statで更新日付を取得する

Pythonマニュアルによると、osモジュールのstat関数を使えば、ファイルに関する様々な情報(os.stat_result)を返してくれます。

最終更新時刻は、os.stat_result.st_mtimeかos.stat_result.st_mtime_nsで取得できます。

以上をふまえて、カレントディレクトリ内のファイルを日付で降順ソート(新しいものから順に並べる)するには、以下のようにします。

sorted(glob.glob('*'), key=lambda f: os.stat(f).st_mtime, reverse=True)
Pythonプログラミング物語 © 2016 Frontier Theme