使用環境: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'])