在python中使用glob.glob定制排序列表

时间:2014-09-03 18:25:32

标签: file python-2.7

除了我在下面实现的内容之外,还有更好的方法来定制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 个答案:

答案 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(...)返回空列表,则glob.glob(...)[:1]也将为空,因此不会将任何项目添加到csvList。如果它不是空的,那么glob.glob(...)[:1]将只包含一个项目,此项目将添加到csvList