递归测试文件夹是否完全为空的最佳方法?
Best way to recursively test whether a folder is completely empty?
测试文件夹、其子文件夹、所有子文件夹等是否为空的最pythonic 方法是什么?我知道 os.listdir() 并提出了下面的函数,但似乎已经有一个标准函数(尽管多次搜索没有结果)。
def is_empty(target_folder): #Recursively tests whether a folder is empty.
import os
if [i for i in os.listdir(target_folder) if not
os.path.isdir(os.path.join(target_folder,i))]:
return False
else:
return all([is_empty(os.path.join(target_folder,i)) for i in
os.listdir(target_folder) if
os.path.isdir(os.path.join(target_folder,i))])
您可以使用 os.walk
,它会为您执行递归。
该函数生成一系列三元组。该元组的第一项是您发送函数的文件夹(目录)下的名称(从您传递的那个开始)。其他两项是直接在第一项文件夹中的子文件夹和文件的列表。
所以只需调用 os.walk
并遍历生成的三元组。任何第二项和第三项具有空列表的元组都将空文件夹名称作为第一项。
测试文件夹、其子文件夹、所有子文件夹等是否为空的最pythonic 方法是什么?我知道 os.listdir() 并提出了下面的函数,但似乎已经有一个标准函数(尽管多次搜索没有结果)。
def is_empty(target_folder): #Recursively tests whether a folder is empty.
import os
if [i for i in os.listdir(target_folder) if not
os.path.isdir(os.path.join(target_folder,i))]:
return False
else:
return all([is_empty(os.path.join(target_folder,i)) for i in
os.listdir(target_folder) if
os.path.isdir(os.path.join(target_folder,i))])
您可以使用 os.walk
,它会为您执行递归。
该函数生成一系列三元组。该元组的第一项是您发送函数的文件夹(目录)下的名称(从您传递的那个开始)。其他两项是直接在第一项文件夹中的子文件夹和文件的列表。
所以只需调用 os.walk
并遍历生成的三元组。任何第二项和第三项具有空列表的元组都将空文件夹名称作为第一项。