2012-09-19 12 views
11

我會通過谷歌的Python的練習,我需要能夠在命令行中執行此操作:傳遞multple文件用星號到Python殼在Windows

python babynames.py --summaryfile baby*.html 

哪裏python是Python外殼,babynames.py是Python程序,--summaryfile是由我的babynames程序解釋的參數,而baby*.html是與該表達式匹配的文件列表。但是,它不起作用,我不確定問題是Windows命令外殼還是Python。 baby*.html表達式沒有擴展到文件的完整列表,而是嚴格按字符串傳遞。可以將多個文件以這種方式傳遞給Python程序嗎?

回答

12

Windows的命令解釋程序不會像UNIX shell在將它們傳遞給執行的程序或腳本之前那樣擴展通配符。

python.exe -c "import sys; print sys.argv[1:]" *.txt 

結果:

['*.txt'] 

解決方案:使用glob模塊。

from glob import glob 
from sys import argv 

for filename in glob(argv[1]): 
    print filename 
+0

我需要檢查包含通配符的參數,然後在這些使用水珠......我也可以?只對所有參數使用glob? – Mike

+0

好吧,它看起來像我可以在文件參數上調用glob,而不管它們是否包含通配符。 Glob-rific :) – Mike

+0

是的,一個沒有任何通配符的文件名就是一個匹配一個文件(或沒有)的模式。不同的是,在這種情況下,您會從'glob()'中獲得一個空列表,而不是稍後再找出該文件不存在。這很微妙,但可能會改變您希望如何處理錯誤。 – kindall

4

跨平臺:

import glob 
if '*' in sys.argv[-1]: 
    sys.argv[-1:] = glob.glob(sys.argv[-1]) 
continue... 
+0

也可以是'?' – jtlz2

0

使用argparse:

import argparse 
parser=argparse.ArgumentParser() 
parser.add_argument(dest='wildcard',nargs='+') 

print(parser.parse_args().wildcard)