フォルダ内のファイル名を簡単に取得したい時によく使います。
ソースはこちらhttp://svn.python.org/view/python/branches/release27-maint/Lib/glob.py?view=markup
下記のようなフォルダがあったとすると、
terminal.
$ ls
0.csv 2.txt 5.csv 7.txt test_glob.py
0.txt 3.csv 5.txt 8.csv
1.csv 3.txt 6.csv 8.txt
1.txt 4.csv 6.txt 9.csv
2.csv 4.txt 7.csv 9.txt
######サンプル
test_glob.py
import glob
text_fnames = glob.glob('./*.txt')
print text_fnames
######実行
output.
$ python test_glob.py
['./0.txt', './1.txt', './2.txt', './3.txt', './4.txt', './5.txt', './6.txt', './7.txt', './8.txt', './9.txt']
このように、*.txt
とすることでファイル内のtxtファイルを簡単に取得できます。
######解説
glob.glob
の引数は文字列で、書き方はシェルと一緒です。
引数には、相対パス、絶対パスの両方が使えます。
また、glob.glob
をglob.iglob
とすれば、イテレータがかえってきます。
ファイルの数が膨大になる時以外は、glob.glob
のみで足りると思います。
ソースの中身的には、glob.iglob
がyeild
で一つづつファイルネームを生み出してる。
glob.glob(pathname)
はただ単にlist(glob.iglob(pathname) )
としてる感じです。
あとは、os
モジュールを使って、検索するだけの簡単なコードになっています。