在目录中递归查找特定扩展名的文件
不知道为什么,这段代码返回了一个空列表,我完全搞不懂原因。
import os, fnmatch
vidext = ['.avi', '.mkv', '.wmv', '.mp4', '.mpg', '.mpeg', '.mov', '.m4v']
def findExt(folder):
matches = []
for root, dirnames, filenames in os.walk(folder):
for extension in vidext:
for filename in fnmatch.filter(filenames, extension):
matches.append(os.path.join(root, filename))
return matches
print(findExt("D:\TVRip"))
1 个回答
13
你需要在每个扩展名后面加上一个通配符,这样fnmatch.filter()
才能匹配:
fnmatch.filter(filenames, '*' + extension)
不过在这里其实根本不需要用到fnmatch
。直接使用str.endswith()
就可以了:
for root, dirnames, filenames in os.walk(folder):
for filename in filenames:
if filename.endswith(extensions):
matches.append(os.path.join(root, filename))
或者可以用列表推导式来表示:
return [os.path.join(r, fn)
for r, ds, fs in os.walk(folder)
for fn in fs if fn.endswith(extensions)]