我的文件结构如下:
我正在尝试计算整个“外部”文件夹中的文件总数。当我将它传递到外部文件夹时,os.walk不会返回任何文件,并且由于只有两层,我手动编写了它:
null
这是更好的方法吗?我可以在任意嵌套的文件夹集中找到文件数吗?我在stackoverflow上看不到任何深层嵌套文件夹的示例。
(通过“更好”,我的意思是某种内置函数,而不是手动编写要迭代的内容-例如,沿着整棵树行走的os.walk)
答案 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
:os
使用。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