使用Python os.walk来标识文件列表

时间:2011-12-24 17:45:08

标签: python

  

可能重复:
  In Python, fastest way to build a list of files in a directory with a certain extension

我目前正在使用os.walk以递归方式扫描标识.MOV文件的目录

def fileList():
    matches = []
    for root, dirnames, filenames in os.walk(source):
        for filename in fnmatch.filter(filenames, '*.mov'):
            matches.append(os.path.join(root, filename))
    return matches

如何扩展它以识别多个文件,例如.mov,.MOV,.avi,.mpg?

感谢。

3 个答案:

答案 0 :(得分:8)

尝试这样的事情:

def fileList(source):
    matches = []
    for root, dirnames, filenames in os.walk(source):
        for filename in filenames:
            if filename.endswith(('.mov', '.MOV', '.avi', '.mpg')):
                matches.append(os.path.join(root, filename))
    return matches

答案 1 :(得分:2)

使用os.path.splitext的替代方案:

for root, dirnames, filenames in os.walk(source):
    filenames = [ f for f in filenames if os.path.splitext(f)[1] in ('.mov', '.MOV', '.avi', '.mpg') ]
    for filename in filenames:
        matches.append(os.path.join(root, filename))
return matches

答案 2 :(得分:2)

pattern = re.compile('.*\.(mov|MOV|avi|mpg)$')

def fileList(source):
   matches = []
   for root, dirnames, filenames in os.walk(source):
       for filename in filter(lambda name:pattern.match(name),filenames):
           matches.append(os.path.join(root, filename))
   return matches