在具有特定名称的子文件夹中查找空文件夹?
Find empty folders in subfolders with certain name?
所有子文件夹都有相同名称的相同文件夹。
我想检查主文件夹内所有目录中哪些名为 dbound 的子文件夹为空,如示例所示。
大约一半具有该名称的文件夹是空的。如何找出哪个?
我试过这个:
from glob import glob
for i in glob(r'C:\Users\user\Desktop\files1' + '**/*/*/*', recursive=True):
print (i)
if os.listdir(i) == []:
print ("Empty")
glob
可以 return 目录 和 文件。在测试之前检查条目是否是目录。并测试名称使用 os.path.basename
if os.path.basename(i) == "dbound" and os.path.isdir(i) and not os.listdir(i):
print ("{} is Empty".format(i))
我更喜欢os.walk
(至少过滤掉目录,忽略文件):
for root,dirs,files in os.walk(r'C:\Users\user\Desktop\files1'):
for d in dirs:
if d=="dbound" and not os.listdir(os.path.join(root,d)):
print("empty dbound: {}".format(os.path.join(root,d)))
两种解决方案都有效,但不知何故并不令人满意,因为您要扫描磁盘两次(glob
/os.walk
和 os.listdir
)
为了避免扫描两次,您必须将结果存储在dictionary/defaultdict中并计算每个目录中的文件,过滤掉没有文件的文件。更复杂。仅当磁盘性能很重要时才这样做。
所有子文件夹都有相同名称的相同文件夹。 我想检查主文件夹内所有目录中哪些名为 dbound 的子文件夹为空,如示例所示。
大约一半具有该名称的文件夹是空的。如何找出哪个? 我试过这个:
from glob import glob
for i in glob(r'C:\Users\user\Desktop\files1' + '**/*/*/*', recursive=True):
print (i)
if os.listdir(i) == []:
print ("Empty")
glob
可以 return 目录 和 文件。在测试之前检查条目是否是目录。并测试名称使用 os.path.basename
if os.path.basename(i) == "dbound" and os.path.isdir(i) and not os.listdir(i):
print ("{} is Empty".format(i))
我更喜欢os.walk
(至少过滤掉目录,忽略文件):
for root,dirs,files in os.walk(r'C:\Users\user\Desktop\files1'):
for d in dirs:
if d=="dbound" and not os.listdir(os.path.join(root,d)):
print("empty dbound: {}".format(os.path.join(root,d)))
两种解决方案都有效,但不知何故并不令人满意,因为您要扫描磁盘两次(glob
/os.walk
和 os.listdir
)
为了避免扫描两次,您必须将结果存储在dictionary/defaultdict中并计算每个目录中的文件,过滤掉没有文件的文件。更复杂。仅当磁盘性能很重要时才这样做。