我正在尝试遍历目录,检索该目录中以特定扩展名结尾的所有文件,并将该文件写入列表。这个列表应该在函数完成其工作后返回。
def grabFiles(source,ext):
import fnmatch
import os
matches = [] #tmp var which is used to return the files matching the search mask.
for root, dirnames, filenames in os.walk(source): #for each folder & subfolder do:
for filename in fnmatch.filter(filenames, ext): #and for each file found like that do:
matches.append(os.path.join(root, filename))#append the file name&directory to the "matches" variable.
return(matches) #return the content of matches
现在,当我使用以下命令运行时:
ext=[".caf", ".lmg", ".chr", ".cdf", ".dds", ".tif", ".mtl", ".cgf", ".cga"]
for filetype in ext:
files= nPy.grabFiles("D:\\01_SVN\\01_DE\\trunk\\Game",filetype)
print files
我相信应该在我的分机列表中为每个分机返回一个包含文件的列表,对吧? 相反,它为ext列表中的每个项目返回一个[]。
如果我在不使用定义的情况下触发这个东西,它就可以正常工作:/
import fnmatch
import os
source ="D:\\01_SVN\\01_DE\\trunk\\Game"
extension = ["*.mtl","*.tif","*.chr"]
matches = []
for filetype in extension:
for root, dirnames, filenames in os.walk("%s" % (source)):
for filename in fnmatch.filter(filenames, "%s" % (filetype)):
matches.append(os.path.join(root, filename))
print matches
我一直盯着这个看了一个多小时,我害怕我现在几乎对自己的剧本视而不见了。<我要么无法返回一个dang列表,要么我误解了返回的工作原理 - 但它应该是将匹配列表传递给一个新的var而没有问题,不是吗?
答案 0 :(得分:2)
我认为您匹配.ext
而不是*.ext
。尝试添加星号以匹配名称,它应该有效。
def grabFiles(source,ext):
import fnmatch
import os
matches = []
for root, dirnames, filenames in os.walk(source):
for filename in fnmatch.filter(filenames, '*' + ext):
matches.append(os.path.join(root, filename))
return matches
关于你的编程风格:
endswith
而不是fnmatch.filter source ="D:\\01_SVN\\01_DE\\trunk\\Game"
使用source=r"D:\01_SVN\01_DE\trunk\Game"