在Python中查找空目录

时间:2011-06-02 13:42:04

标签: python rmdir

所有

在删除目录之前检查目录中是否有数据的最佳方法是什么?我正在浏览几页以找到使用wget的一些图片,当然每个页面上都没有图像,但目录仍然是创建的。

dir = 'Files\\%s' % (directory)
os.mkdir(dir)
cmd = 'wget -r -l1 -nd -np -A.jpg,.png,.gif -P %s %s' %(dir,  i[1])
os.system(cmd)
if not os.path.isdir(dir):
    os.rmdir(dir)

我想测试一下文件在创建后是否被删除。如果没有,请删除它。

谢谢, 亚当

9 个答案:

答案 0 :(得分:55)

import os

if not os.listdir(dir):
    os.rmdir(dir)

LBYL风格。
对于EAFP,请参阅mouad的回答。

答案 1 :(得分:44)

我会像EAFP那样:

try:
    os.rmdir(dir)
except OSError as ex:
    if ex.errno == errno.ENOTEMPTY:
        print "directory not empty"

os.rmdir不会删除非空目录。

答案 2 :(得分:18)

尝试:

if not os.listdir(dir): 
    print "Empty"

if os.listdir(dir) == []:
    print "Empty"

答案 3 :(得分:5)

现在可以在Python3.5+中更有效地完成此操作,因为无需构建目录内容列表只是为了查看它是否为空:

import os

def is_dir_empty(path):
    return next(os.scandir(path), None) is None

答案 4 :(得分:2)

如果你检查了目录是否存在,以及目录中是否有内容......如下所示:

if os.path.isdir(dir) and len(os.listdir(dir)) == 0:
    os.rmdir(dir)

答案 5 :(得分:1)

如果已经创建了空目录,则可以将此脚本放在外部目录中并运行它:

req.query

答案 6 :(得分:0)

这是检查目录是否为空的最快且最优化的方法。

empty = False
for dirpath, dirnames, files in os.walk(dir):
    if files:
        print("Not empty !") ;
    if not files:
        print("It is empty !" )
        empty = True
    break ;
  

此处提到的其他答案不快因为,如果您想使用通常的os.listdir(),如果目录文件太多,则你的代码,如果你使用os.rmdir( )方法来尝试捕获错误,那么它只会删除该文件夹。如果您只想检查空虚,这可能不是您想要做的事情。

答案 7 :(得分:0)

我有Bash checking if folder has contents的回答。

主要是作为@ https://stackoverflow.com/a/47363995/2402577上@ ideasman42的答案的类似方法,以便不构建完整的列表,这可能也适用于Debian

无需仅建立目录内容列表即可 看看它是否为空:


os.walk('.')返回目录下的完整文件,如果有成千上万个文件,则可能效率不高。而是跟随命令find "$target" -mindepth 1 -print -quit返回找到的第一个文件并退出。如果返回空字符串,则表示文件夹为空。

您可以使用find检查目录是否为空,并对其进行处理 输出

def is_dir_empty(absolute_path):
    cmd = ["find", absolute_path, "-mindepth", "1", "-print", "-quit"]
    output = subprocess.check_output(cmd).decode("utf-8").strip()
    return not output

print is_dir_empty("some/path/here")

答案 8 :(得分:-2)

import os
import tempfile

root = tempfile.gettempdir()
EMPTYDIRS = []

for path, subdirs, files in os.walk(r'' + root ):
    if len( files ) == 0 and len( subdirs ) == 0:
        EMPTYDIRS.append( path )

for e in EMPTYDIRS:
    print e