如何创建一个 python 列表,其中包含目录的每个子目录中的文件数

How to create a python list with the number of file in each sub directory of a directory

我有一个主目录(根目录),其中包含 6 个子目录。 我想 计算每个子目录中存在的文件数量,并将所有文件添加到一个简单的 python 列表 .

对于这个结果:mylist = [497643, 5976, 3698, 12, 456, 745]

我被那个代码屏蔽了:

import os, sys
list = []
# Open a file
path = "c://root"
dirs = os.listdir( path )

# This would print all the files and directories
for file in dirs:
   print (file)

#fill a list with each sub directory number of elements
for sub_dir in dirs:
    list = dirs.append(len(sub_dir))

我对列表填充的尝试没有用,我戏剧性地处于最佳状态...

找到一种方法来迭代主目录的子目录并在每个子目录上应用一个函数来填充列表,这将使我的实际数据科学项目的速度飞速上升!

感谢您的帮助

亚伯

您需要在每个子目录上使用 os.listdir。当前代码仅采用文件路径的长度。

import os, sys
list = []
# Open a file
path = "c://root"
dirs = os.listdir( path )

# This would print all the files and directories
for file in dirs:
   print (file)

#fill a list with each sub directory number of elements
for sub_dir in dirs:
    temp = os.listdir(sub_dir)
    list = dirs.append(len(temp))

将此行添加到代码中将列出子目录

你快到了:

import os, sys

list = []

# Open a file
path = "c://root"
dirs = os.listdir(path)

# This would print all the files and directories
for file in dirs:
    print(file)

for sub_dir in dirs:
    if os.path.isdir(sub_dir):
        list.append(len(os.listdir(os.path.join(path, sub_dir))))

print(list)

您可以使用os.path.isfile and os.path.isdir

res = [len(list(map(os.path.isfile, os.listdir(os.path.join(path, name))))) for name in os.listdir(path) if os.path.isdir(os.path.join(path, name))]
print(res)

使用 for 循环

res = []
for name in os.listdir(path):
    dir_path = os.path.join(path, name)
    if os.path.isdir(dir_path):
        res.append(len(list(map(os.path.isfile, os.listdir(dir_path)))))

作为替代方案,您也可以使用 glob 模块来完成此任务和其他相关任务。 我创建了一个 test 目录,其中包含 3 个子目录 lmk,每个子目录包含 3 个测试文件。

import os, glob
  
list = []
path = "test" # you can leave this "." if you want files in the current directory

for root, dirs, files in os.walk(path, topdown=True):
   for name in dirs:
     list.append(len(glob.glob(root + '/' +  name + '/*')))

print(list)

输出:

[3, 3, 3]