比较目录中的子文件夹编号

时间:2018-03-26 09:53:54

标签: python directory

我有一部分脚本可以计算目录中的多个子文件夹。 我有5个目录,每个目录必须包含相同数量的子文件夹。 我想得到的是检查或比较目录是否相等,如:

dir1 = 12 subdirs
dir2 = 12 subdirs
dir3 = 12 subdirs
dir4 = 12 subdirs
dir5 = 12 subdirs 

如果其中一个目录中缺少一个子文件夹,则会收到错误并执行操作。

我的剧本:

import os            

    root = 'F:\gop\gop_img_test\\2018-03-06'

    def count_subdirectories(root):
    return len([d for d in os.listdir(root) if 
    os.path.isdir(os.path.join(root, d))])

    subdirectory_counts = set()
    num_directories = 0
    len_subdirs = []
    for d in os.listdir(root):
    dir_to_check = os.path.join(root, d)
    if os.path.isdir(dir_to_check):

    num_subdirs = count_subdirectories(dir_to_check)
    num_directories += 1
    subdirectory_counts.add(num_subdirs)
    #data_dict = []
    #data_dict.append(num_subdirs)
    #print(data_dict)
    if len(set(len_subdirs)) == 1:
        print("All sub directories contain equal number of folders")
    else:
        print("Sub-directories do NOT contain equal numbers of folders")
        Join = input("veille passer plus loin ?? :")
        if Join.lower() == 'yes':
              ### doing my stuff    

        else:
            print("answer yes or not ")

带回报:

12
12
12
12
11

子目录的数量不一样。如何用Python检查它,当数字不相同时,做点什么?

1 个答案:

答案 0 :(得分:0)

虽然毫无疑问不是最有效的方法,您可以将num_subdirs的长度存储在列表中,然后检查重复项。 检查列表中的所有值是否相同的一种方法是将它们转换为集合。 集合不能包含重复项,因此如果所有值都相同,则设置长度= 1。 e.g。

在for循环之前添加以下内容:

len_subdirs = []

然后在循环结束时将值附加到列表中:

len_subdirs.append(num_subdirs)

检查所有长度是否相同

if len(set(len_subdirs))==1:
    print("All sub directories contain equal number of folders")
else:
    print("Sub-directories do NOT contain equal numbers of folders")

这当然必须遍历所有目录。您可以存储第一个目录的长度,然后在每个循环中对此进行比较,只要一个不匹配,就可以在需要时停止循环。