コマンドライン引数のワイルドカードを展開する

今日も Python ネタ。

とかいいつつ Ruby の話から入るけど、Ruby はコマンドラインのワイルドカードを展開してくれる。

^o^ > type argv.rb
ARGV.each {|a| puts a}

^o^ > ruby argv.rb *.py
argv.py
binary_search.py
bubble_sort.py
counting_sort.py
count_char.py
count_files.py
csv_read.py
csv_write.py
default_arg.py
dict.py
dictionary.py
dict_keys.py
difference.py
difference2.py
enumerate.py
exception1.py
exception2.py
exception3.py
expand_num.py
(以下略)

でも、Python はそんな気の利いたことしてくれない。

^o^ > type argv.py
import sys

print sys.argv


^o^ > python argv.py *.py
['argv.py', '*.py']

そこで、glob モジュールの出番になる。

 cf. 10.7. glob — Unix 形式のパス名のパターン展開

import sys
import glob

files = glob.glob(sys.argv[1])
for file in files:
    print file

実行:

^o^ > python argv2.py *.py
argv.py
argv2.py
binary_search.py
bubble_sort.py
counting_sort.py
count_char.py
count_files.py
csv_read.py
csv_write.py
default_arg.py
dict.py
dictionary.py
dict_keys.py
difference.py
difference2.py
enumerate.py
exception1.py
exception2.py
exception3.py
expand_num.py
(以下略)