在Python中查找空目录

问题描述:

全部,在Python中查找空目录

什么是在删除目录之前查看目录中是否有数据的最佳方法?我正在浏览几个页面,使用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) 

我想测试一下文件是否在创建后删除目录。如果什么都没有......删除它。

感谢, 亚当

+0

定义“空”。如果有子目录呢?他们应该检查数据吗?如果他们没有数据,他们是否也应该被删除? – kwatford 2011-06-02 13:57:33

+0

在这种情况下,我没有任何子目录只是一个文件夹,它可能有或没有照片。 – aeupinhere 2011-06-02 14:04:42

+3

请不要使用os.system来调用wget。使用子流程.Popen – 2011-06-02 14:43:08

尝试:

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

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

import os 

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

LBYL风格。
for EAFP,参见mouad的回答。

如果该目录存在,以及是否有目录中的内容,如果你也查了一下......是这样的:

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

我将与EAFP去像这样:

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

注意:os.rmdir不要删除非空的目录。

+2

+1:简单。直接。它将全部**的棘手决策委托给它所属的操作系统。 – 2011-06-02 13:56:54

+1

请注意,此函数会静默地删除您可能想要报告的所有其他错误(例如'EACCESS')。请注意,天真地解决这个问题可能会导致为非空目录报告错误,您可能会忽略它。不像看起来那么简单:-) – 2014-01-08 16:51:16

+2

'else:raise'呢? – spectras 2015-09-07 17:05:41

如果已经创建的空目录,你可以把这个脚本在你的外部目录并运行它:

import os 

def _visit(arg, dirname, names): 
    if not names: 
     print 'Remove %s' % dirname 
     os.rmdir(dirname) 

def run(outer_dir): 
    os.path.walk(outer_dir, _visit, 0) 

if __name__ == '__main__': 
    outer_dir = os.path.dirname(__file__) 
    run(outer_dir) 
    os.system('pause') 

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 

这现在可以在Python3更有效地完成,因为没有必要建立一个目录内容清单,看看它是否为空:

import os 

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