计算子文件夹中文件总数的最佳方法(python)

时间:2019-08-27 13:48:52

标签: python

我的文件结构如下:

  • 外部文件夹
    • 内部文件夹1
      • 文件...
    • 内部文件夹2
      • 文件...

我正在尝试计算整个“外部”文件夹中的文件总数。当我将它传递到外部文件夹时,os.walk不会返回任何文件,并且由于只有两层,我手动编写了它:

null

这是更好的方法吗?我可以在任意嵌套的文件夹集中找到文件数吗?我在stackoverflow上看不到任何深层嵌套文件夹的示例。

(通过“更好”,我的意思是某种内置函数,而不是手动编写要迭代的内容-例如,沿着整棵树行走的os.walk)

4 个答案:

答案 0 :(得分:1)

我建议您将递归用作以下功能:

def get_folder_count(path):
    folders = os.listdir(path)
    folders = list(filter(lambda a: os.path.isdir(os.path.join(path, a)), folders))
    count = len(folders)
    for i in range(count):
        count += get_folder_count(os.path.join(path, folders[i]))
    return count

答案 1 :(得分:1)

使用pathlib

显然您也想要这些文件:

from pathlib import Path
import numpy as np

p = Path.cwd()  # if you're running in the current dir
p = Path('path to to dir')  # pick one 

# gets all the files
f = [y for y in p.rglob(f'*')] 

# counts them
values, counts = np.unique([x.parent for x in f ], return_counts=True)

print(list(zip(counts, values)))

输出:

  • 具有计数和路径的元组列表
[(8, WindowsPath('E:/PythonProjects/stack_overflow')),
 (2, WindowsPath('E:/PythonProjects/stack_overflow/.ipynb_checkpoints')),
 (7, WindowsPath('E:/PythonProjects/stack_overflow/complete_solutions/data')),
 (3, WindowsPath('E:/PythonProjects/stack_overflow/csv_files')),
 (1,
  WindowsPath('E:/PythonProjects/stack_overflow/csv_files/.ipynb_checkpoints')),
 (5, WindowsPath('E:/PythonProjects/stack_overflow/data'))]
  • print(f)将返回文件列表

答案 2 :(得分:0)

这是Blender here建议的一种方法。 def fileCount(文件夹):     “计算目录中的文件数”

count = 0

for filename in os.listdir(folder):
    path = os.path.join(folder, filename)

    if os.path.isfile(path):
        count += 1
    elif os.path.isfolder(path):
        count += fileCount(path)

return count

这包装在一个函数中。但是,您需要澄清“最佳”的含义。那是最快的吗?最易读?记忆力最低?

答案 3 :(得分:0)

  

“更好”是指某种内置函数,而不是手动编写要迭代的内容-例如沿着整棵树走的os.walk

import os
number_of_files = sum([len(files) for r, d, files in os.walk("path/to/folder")])

来源(可能重复):Return number of files in directory and subdirectory