Python - 循环访问某些扩展的文件

puf*_*muf 11 python python-3.x

我正在尝试遍历文件夹和所有子文件夹以查找某些文件类型的所有文件 - 例如,仅.mp4,.avi,.wmv.

这是我现在拥有的,它遍历所有文件类型:

import os
rootdir = 'input'

for subdir, dirs, files in os.walk(rootdir):
     for file in files:
          print (os.path.join(subdir, file))
Run Code Online (Sandbox Code Playgroud)

谢谢!

Pad*_*ham 15

对于多个扩展,最简单的方法是使用str.endswith传递子串的元组来检查:

  for file in files:
      if file.endswith((".avi",".mp4","wmv")):
         print (os.path.join(subdir, file))
Run Code Online (Sandbox Code Playgroud)

您可以使用iglob如下所示并链接返回的搜索或使用re.search但使用endswith可能是最好的方法.

from itertools import chain
from glob import iglob

for subdir, dirs, files in os.walk(rootdir):
    for file in chain.from_iterable(iglob(os.path.join(rootdir,p)) for p in ("*.avi", "*.mp4", "*wmv")) :
            print(os.path.join(subdir, file))
Run Code Online (Sandbox Code Playgroud)

使用python3.5 glob现在支持使用**语法的递归搜索:

from itertools import chain
from glob import iglob

from glob import iglob
for file in chain.from_iterable(iglob(os.path.join(rootdir,p)) 
      for p in (rootdir+"**/*.avi", "**/*.mp4", "**/*wmv")):
          print(file)
Run Code Online (Sandbox Code Playgroud)


ozg*_*gur 14

您可以使用os.path.splitext哪个路径并从文件扩展名的末尾拆分文件扩展名:

import os
rootdir = 'input'
extensions = ('.mp4', '.avi', '.wmv')

for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        ext = os.path.splitext(file)[-1].lower()
        if ext in extensions:
            print (os.path.join(subdir, file))
Run Code Online (Sandbox Code Playgroud)