2012-08-28 16 views
0

我在寫一個小腳本,應該能夠處理多個文件。所以我已經添加了文件可以通過逗號分隔,並做一個arg.split(','),然後處理每個文件。傳遞星號時的python行爲

現在我想添加星號作爲輸入可能像

python myPythonScript.py -i folder/* 

如果我打印的參數-i選項權當我訪問我第一次拿到

folder/firstFileInFolder.txt 

但如果我打電話給我的腳本

python myPythonScript.py -i someFolder/someFile,folder/* 

它工作得很好。有沒有人有一個想法,爲什麼Python可能會這樣?

+7

它不是python這樣做的 - 它是你的shell .. – tuxtimo

+0

傳遞多個文件的標準方法是讓你的shell遍歷輸入,它們將作爲單獨的參數傳遞它們。不要使用逗號分隔。如果您正在遍歷傳遞文件的內容,那麼Python'fileinput'模塊可能會很有用。 –

回答

1

嘗試運行此腳本

import sys 

for arg in sys.argv: 
    print arg 

蟒蛇script.py *

你的shell擴展了星號Python看到它之前。

+2

或只是'print sys.argv' :) – nneonneo

+0

@nneonneo你讓我在那裏:) –

+0

我如何得到它擴展到的整個列表?現在我有這個 'elif opt =='-i': all_documents = arg.split(',')' 我可以得到shell來擴展逗號後面的輸入嗎? – user857990

0

正如在評論中提到的,您的shell正在擴展非逗號分隔情況的星號。如果您知道用戶可以在第二個示例中指定一個星號作爲文件名的一部分,那麼可以讓Python通過使用glob模塊進行路徑擴展。

from glob import glob 
glob('*') 

代碼,這將允許無論是外殼或Python做星號擴張可能是這個樣子:然後

import glob 
file_list = [] 
for pattern in sys.argv[1:]: 
    file_list.extend(glob.glob(pattern)) 

在你的情況,用逗號作爲分隔符會阻止您使用逗號作爲文件名的一部分。