# expand_wc.py import sys, glob, operator print sys.argv[1:] # 展開前 sys.argv = reduce(operator.add, map(glob.glob, sys.argv)) print sys.argv[1:] # 展開後
実行結果:
$ ls abc.txt xyz.txt expand_wc.py $ python expand_wc.py *.txt *.py ['abc.txt', 'xyz.txt', 'expand_wc.py'] ['abc.txt', 'xyz.txt', 'expand_wc.py'] $ python expand_wc.py '*.txt' '*.py' ['*.txt', '*.py'] ['abc.txt', 'xyz.txt', 'expand_wc.py']
前者はシェルによるワイルドカード展開、後者はPythonによるワイルドカード展開が行われている。
別解:ナイーブな実装
import sys, glob L = [] for ptn in sys.argv: for fn in glob.glob(ptn): L.append(fn) sys.argv = L
別解:リストの内包表記
import sys, glob sys.argv = [fn for fn in [glob.glob(ptn) for ptn in sys.argv]] # または sys.argv = [fn for ptn in sys.argv for fn in glob.glob(ptn)]
内包表記の入れ子(後者)は正直読めない。