我试图遍历文件夹和所有子文件夹以查找某些文件类型的所有文件 - 例如,仅.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))
谢谢!
答案 0 :(得分:14)
对于多个扩展,最简单的方法是使用str.endswith
传递一个子串元组来检查:
for file in files:
if file.endswith((".avi",".mp4","wmv")):
print (os.path.join(subdir, file))
您可以使用下面的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))
使用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)
答案 1 :(得分:13)
您可以使用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))
答案 2 :(得分:3)
几天前我实际上做了类似的事情,这就是我做的事情:
EXTENSIONS = ('.cpp','.hpp')
for root, dirs, files in os.walk(top):
for file in files:
if file.endswith(EXTENSIONS):
#file which ends with extension type so do your thing!
希望这就是你所追求的。您可以在github上查看整个脚本。
答案 3 :(得分:0)
从Python 3.4开始,您可以使用pathlib
:
from pathlib import Path
from itertools import chain
rootdir = 'input'
p = Path(rootdir)
for file in (chain(p.glob('**/*.mp4'), p.glob('**/*.avi'))):
print(file)