如何爬取文件夹以索引文件?

-1 投票
3 回答
10834 浏览
提问于 2025-04-17 08:22

我想找一种方法,可以像使用'树'命令一样,遍历整个文件系统,找到所有的*.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'))

撰写回答