如何爬取文件夹以索引文件?
我想找一种方法,可以像使用'树'命令一样,遍历整个文件系统,找到所有的*.R3D文件,不管它们在什么文件夹或子文件夹里,并把它们列出来。有什么最有效的办法吗?同时希望这个过程对系统的负担尽量小。
3 个回答
0
os.walk()
这个函数就是用来做这个的。
下面是链接中的一个例子:
import os
from os.path import join, getsize
for root, dirs, files in os.walk('python/Lib/email'):
print root, "consumes",
print sum(getsize(join(root, name)) for name in files),
print "bytes in", len(files), "non-directory files"
if 'CVS' in dirs:
dirs.remove('CVS') # don't visit CVS directories
4
在@phihag的例子基础上进行改进:
def all_files(directory):
for path, dirs, files in os.walk(directory):
for f in files:
yield os.path.join(path, f)
r3d_files = [f for f in all_files(your_directory)
if f.endswith('.R3D')]
6
你可能想用一个辅助函数来封装一下 os.walk
,可以像这样做:
import os
def filesByPattern(directory, matchFunc):
for path,dirs,files in os.walk(directory):
for f in filter(matchFunc, path):
yield os.path.join(path, f)
certainFolder = '.'
allR3DFiles = filesByPattern(certainFolder, lambda fn: fn.endswith('.R3D'))