我有一部分脚本可以计算目录中的多个子文件夹。 我有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检查它,当数字不相同时,做点什么?
答案 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")
这当然必须遍历所有目录。您可以存储第一个目录的长度,然后在每个循环中对此进行比较,只要一个不匹配,就可以在需要时停止循环。