Posted at

globを使ったフォルダ内のファイルネームの取得

More than 3 years have passed since last update.

フォルダ内のファイル名を簡単に取得したい時によく使います。

ソースはこちら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.globglob.iglobとすれば、イテレータがかえってきます。

ファイルの数が膨大になる時以外は、glob.globのみで足りると思います。

ソースの中身的には、glob.iglobyeildで一つづつファイルネームを生み出してる。

glob.glob(pathname)はただ単にlist(glob.iglob(pathname) )としてる感じです。

あとは、osモジュールを使って、検索するだけの簡単なコードになっています。