Python中有没有一种方法可以在不使用os.walk、glob或fnmatch的情况下递归搜索目录、子目录和文件? 我知道使用这些模块会使生活变得简单很多,但是当我学习Python时,我希望能够巩固基础,然后走上捷径。这样,当面对更大的问题时,我可以分析并解决它

Python中有没有一种方法可以在不使用os.walk、glob或fnmatch的情况下递归搜索目录、子目录和文件? 我知道使用这些模块会使生活变得简单很多,但是当我学习Python时,我希望能够巩固基础,然后走上捷径。这样,当面对更大的问题时,我可以分析并解决它,python,python-3.x,recursion,directory,Python,Python 3.x,Recursion,Directory,我希望能够返回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.listdi

我希望能够返回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中,没有第二个循环。

我会查看并从那里开始。@MartijnPieters我已经做了一些编辑和更改。这是否澄清了我的意思?那么你在这里挣扎的是什么?您遇到了什么需要解释的问题?@MartijnPieters我希望能够计算F:\目录中的所有文件,包括子文件夹。例如,我的目录中总共有50个文件夹。但在这些文件夹中,有更多的文件夹和/或文件。我希望能够计算所有文件和文件夹,并返回项目总数。对,不清楚您是否希望递归到子目录。你是怎么做到的?您是否知道递归,或者使用堆栈或队列?您是否查看了
os.walk()
源代码以了解它是如何做到这一点的?