使用递归代码,我想要 return 一组 2 个值(总文件、文件夹)

Using the recursive code, I want to return a set of 2 values (total files, folders)

我编写的这个程序没有使用 os.walk()、glob 或 fnmatch,这是有意为之的。它查看指定目录中的目录和所有子目录和文件,以及 return 那里有多少文件 + 文件夹。

import os

def fcount(path):
    count = 0

    '''Folders'''
    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

    '''Files'''
    for f in os.listdir(path):
        if os.path.isfile(os.path.join(path, f)):
            count += 1
    return count

path = 'F:\'
print(fcount(path))

我得到的示例输出是目录 F 给了我 700 总共 700 个文件和文件夹。

我现在想做的是使用这段代码,当然有一些修改,调用 fcount('F:\') 和 return 一个集合 (total files, folders).

我想要的输出示例是:(700, 50)700files + folders50 只是 folders.

我不知道该怎么做。

保留两个计数并将它们return作为一个元组:

total_count = dir_count = 0, 0
# .. increment either as needed
return total_count, dir_count

您只需要循环 os.listdir() 一次;您已经检测到某个东西是文件还是目录,所以只需在一个循环中区分它:

def fcount(path):
    total_count = dir_count = 0

    for f in os.listdir(path):
        file = os.path.join(path, f)
        if os.path.isdir(file):
            recursive_total_count, recursive_dir_count = fcount(file)
            # count this directory in the total and the directory count too
            total_count += 1 + recursive_total_count
            dir_count += 1 + recursive_dir_count
        elif if os.path.isfile(file):
            total_count += 1
    return file_count, total_count

path = 'F:\'
print(fcount(path))

最后的 print() 然后打印一个包含计数的元组;你总是可以把它们分开:

total_count, dir_count = fcount(path)
print('Total:', total_count)
print('Directories:', dir_count)