0

我正在尝试遍历一个目录,检索该目录中以某个扩展名结尾的所有文件,然后将该文件写入一个列表。这个列表应该在函数完成其工作后返回。

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 列表中每个扩展名的文件,对吗?相反,它为 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 列表,要么我误解了返回的工作原理 - 但它应该从匹配一个新的变量没有问题,不是吗?

4

1 回答 1

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

关于你的编程风格:

  • 避免在评论中重复你正在做的事情。没用
  • return 是类似 print 的关键字,而不是函数
  • 我宁愿使用endswithfnmatch.filter
  • 避免导入函数
  • 而不是source ="D:\\01_SVN\\01_DE\\trunk\\Game"使用source=r"D:\01_SVN\01_DE\trunk\Game"
于 2012-04-11T09:38:26.923 回答