2014-09-03 59 views
0

除了我在下面實現的內容外,是否有更好的方式來自定義glob.glob列表?python中使用glob.glob的自定義排序列表

csvList = [] 
if glob.glob(filepath + '\\*US-CIR.csv'): 
    csvList.append(glob.glob(filepath + '\\*US-CIR.csv')[0]) 
if glob.glob(filepath + '\\*US-PIR.csv'): 
    csvList.append(glob.glob(filepath + '\\*US-PIR.csv')[0]) 
if glob.glob(filepath + '\\*DS-PIR.csv'): 
    csvList.append(glob.glob(filepath + '\\*DS-PIR.csv')[0]) 

回答

1

csvList可以由list comprehension來定義:

csvList = [item for suffix in ('US-CIR', 'US-PIR', 'DS-PIR') 
      for item in glob.glob(filepath + '\\*{}.csv'.format(suffix))[:1]] 

的列表解析等價於:

csvList = [] 
for suffix in ('US-CIR', 'US-PIR', 'DS-PIR'): 
    for item in glob.glob(filepath + '\\*{}.csv'.format(suffix))[:1]: 
     csvList.append(item) 

的原代碼的主要缺點是,它可能不止一次地重複同樣的呼叫至glob.glob。它調用glob.glob最多六次。上面的列表理解稱爲glob.glob三次。

如果​​返回空列表,則glob.glob(...)[:1]也將爲空,因此沒有項目將被添加到csvList。如果非空,則glob.glob(...)[:1]將只包含一個項目,並且該項目將被添加到csvList

+0

清晰簡潔的答案。謝謝! – user2771721 2014-09-03 21:36:36