使用環境:Pyhton 2.7.11

 

Python でディレクトリ内のファイルリストを取得する方法には、いくつか方法がある。

その中でも glob module が便利そうなのでメモしておく。

パスの指定に正規表現を使うことができる。

例えば、

 

$ls tmp 

dir1/  dir2/  dir3/  file1.txt  file2.png  file3.txt

 

というようなディレクトリがあったとする。

 

☆ glob を使う

>>> import glob

>>> glob.glob("tmp/*.txt")

['tmp/file1.txt', 'tmp/file3.txt']

 

という使い方ができる。

 

☆ listdir を使う

>>> from os import listdir

>>> listdir("./tmp")

['dir1', 'dir2', 'dir3', 'file1.txt', 'file2.png', 'file3.txt']

 

これで、ファイルもディレクトリも含めて全部のリストが返される。

ファイルだけを選択するには、

 

>>> fs=[]

>>> for f in listdir("tmp"):

...     if path.isfile("tmp/"+f):

...             fs.append(f)

... 

>>> fs

['file1.txt', 'file2.png', 'file3.txt']

 

あるいは

 

>>> [f for f in listdir("tmp") if path.isfile("tmp/"+f)]

['file1.txt', 'file2.png', 'file3.txt']

 

Path の指定は、"tmp/"+f の代わりに path.join("tmp",f) を使う方が良い。

Unix, OSX, Win といったOSの違いによるパスセパレータの違いを吸収してくれる。

 

☆ walk を使う

tmp の下の dir1, dir2, dir3 の下にもファイルやディレクトリがあるとする。

>>> from os import walk

>>> for f in walk("tmp"):

...     print f

... 

('tmp', ['dir1', 'dir2', 'dir3'], ['file1.txt', 'file2.png', 'file3.txt'])

('tmp/dir1', [], ['file11.txt'])

('tmp/dir2', ['dir21'], ['file21.png', 'file22.jpeg'])

('tmp/dir2/dir21', [], ['file221.csv'])

('tmp/dir3', [], ['file31.docx'])