在 Python 中是否有办法在不使用 os.walk、glob 或 fnmatch 的情况下递归搜索目录、子目录和文件



我知道使用这些模块使生活变得容易得多,但是当我学习Python时,我希望能够巩固基础,然后进入快捷方式。这样,当遇到更大的问题时,我可以分析和解决它。

我希望能够返回 1 个目录中的文件夹和文件总数,例如目录 F:\

我想出了:

import os
def fcount(path):
  count = 0
  for f in os.listdir(path):
    file = os.path.join(path, f)
    if os.path.isdir(file):
      file_count = fcount(file)
      count += file_count + 1
  for f in os.listdir(path):
    if os.path.isfile(os.path.join(path, f)):
      count += 1
  return count
path = 'F:\'
print(fcount(path))

这是最终答案。这将为您提供指定目录中的子目录和文件的总数。

如果不使用 os.walk 或使用相同内容的东西,则无法(递归地)获取目录下所有文件的数量。

此信息需要此工作,您无法以其他方式执行此操作。显然,还有其他库正在做类似的工作,但有一些变化,但关键是这主要是同一件事。

这是要做的代码,就像os.walk一样。这是手动递归。

import os
def fcount(path):
    count = 0
    for f in os.listdir(path):
        file = os.path.join(path, f)
        if os.path.isdir(file):
            file_count = fcount(file)
            count += file_count + 1
    for f in os.listdir(path):
        if os.path.isfile(os.path.join(path, f)):
        count += 1
    return count
path = 'F:\'
print(fcount(path))

注意:最初在OP中,没有第二个循环。

最新更新