在Python中查找空目录

在Python中查找空目录,python,rmdir,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)

全部,

在删除目录之前,检查目录中是否有数据的最佳方法是什么?我用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)
我想测试一个文件是否在创建后被删除到目录中。如果没有,删除它

谢谢, 亚当

试试看:

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

风格。

有关详细信息,请参阅mouad的答案。

如果您检查了目录是否存在,以及目录中是否有内容,该怎么办。。。比如:

if os.path.isdir(dir) and len(os.listdir(dir)) == 0:
    os.rmdir(dir)
我会这样说:


不会删除非空目录。

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

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')

现在可以在中更有效地执行此操作,因为不需要构建目录内容列表来查看其是否为空:

导入操作系统
def为空(路径):
使用os.scandir(路径)作为扫描:
返回下一步(扫描,无)为无
用法示例:


如果os.path.isdir(目录)为空(目录):
rmdir(目录)
这里是检查目录是否为空的最快、最优化的方法。
这里提到的其他答案是不快,因为如果您想使用通常的
os.listdir()
,如果目录中有太多文件,它将减慢ur代码,如果您使用
os.rmdir()
方法尝试捕获错误,那么它将简单地删除该文件夹。这可能不是你想做的事情,如果你只是想检查空虚

我有以下答案

这主要是与@ideasman42的答案类似的方法,目的是不构建完整的列表,这可能也适用于
Debian

不需要构建目录内容列表,只需 看看它是否为空:


os.walk('.')
返回目录下的完整文件,如果有数千个,则可能效率低下。相反,下面的命令
find“$target”-mindepth 1-print-quit
返回第一个找到的文件并退出。如果返回空字符串,则表示文件夹为空

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

def为空(绝对路径):
cmd=[“查找”,绝对路径,“-mindepth”,“1”,“-print”,“-quit”]
输出=子进程。检查输出(cmd)。解码(“utf-8”).strip()
返回不输出
打印为空(“部分/路径/此处”)

+1:简单。直接的。它将所有棘手的决策委托给它所属的操作系统。请注意,此函数会自动删除您可能要报告的所有其他错误(例如
EACCESS
)。请注意,天真地修复此问题可能会导致报告非空目录的错误,您可能希望忽略这些错误。不是看起来那么简单:-)怎么样
else:raise
?很好但是:
NameError:name'errno'没有定义
你需要
导入errno
!定义“空”。如果有子目录呢?是否应该检查它们的数据?如果其中没有数据,是否也应该删除它们?在这种情况下,我没有任何子目录,只有一个文件夹,其中可能有图片,也可能没有图片。请不要使用os.system调用wget。使用subprocess.PopenIn Essential:
isempty=lambda path:not next(os.scandir(path),None)
除了语句之外,不要使用os.listdir或try。os.scandir的速度快了几个数量级。使用
os.scandir
速度快,优点是更清晰,不需要生成不使用的列表。如果目录包含数千个文件,那么
os.listdir(dir)
返回大小是否会成为问题@科里·戈德伯格
if os.path.isdir(dir) and len(os.listdir(dir)) == 0:
    os.rmdir(dir)
try:
    os.rmdir(dir)
except OSError as ex:
    if ex.errno == errno.ENOTEMPTY:
        print "directory not empty"
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
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 ;