你离得很近。您需要附加到循环外部的列表
mxd_list = []
for top_dir, dir_list, obj_list in os.walk(top_path):
mxd_list.extend([os.path.join(top_dir, obj) for obj in obj_list if obj.endswith('.mxd')])
错误在于 - 在外部 for 循环的每次迭代中,列表 comp 将生成仅特定于该迭代的列表,因此您需要extend
每次迭代外部变量后生成的每个列表,mxd_list
.
注意 - 的[
是多余的,因为删除它们将使内容成为生成器表达式。该语句可以写成mxd_list.extend(os.path.join(top_dir, obj) for obj in obj_list if obj.endswith('.mxd'))
.
另一种方法- 使用glob.iglob https://docs.python.org/2/library/glob.html#glob.iglob
正如帕德里克提到的 https://stackoverflow.com/questions/28682226/list-comprehension-with-ternary-operator-to-get-list-of-files-of-a-specific-type/28682289?noredirect=1#comment45657769_28682289
mxd_list = []
for top_dir, dir_list, obj_list in os.walk(top_path):
mxd_list.extend(iglob(top_dir+"/*.mxd"))
是一种更好的方法。但不要忘记import
该模块,即from glob import iglob