43

全部,

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

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

谢谢,亚当

4

9 回答 9

64
import os

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

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

于 2011-06-02T13:48:57.763 回答
48

我会像这样使用EAFP

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

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

于 2011-06-02T13:51:38.107 回答
17

尝试:

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

或者

if os.listdir(dir) == []:
    print "Empty"
于 2011-06-02T13:48:40.967 回答
11

这现在可以在Python3.5+中更有效地完成,因为不需要构建目录内容列表来查看它是否为空:

import os

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

示例用法:


if os.path.isdir(directory) and is_dir_empty(directory):
    os.rmdir(directory)
于 2017-11-18T08:13:46.067 回答
2

如果您确实检查了目录是否存在,以及目录中是否有内容...例如:

if os.path.isdir(dir) and len(os.listdir(dir)) == 0:
    os.rmdir(dir)
于 2011-06-02T13:49:00.287 回答
1

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

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')
于 2016-05-20T14:51:00.813 回答
1

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

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( )方法尝试捕获错误,那么它只会删除那个文件夹. 如果您只想检查是否有空,这可能不是您想做的事情。

于 2018-05-14T11:47:02.020 回答
0

我有追随者Bash 检查文件夹是否有内容答案。

主要是与@ideasman42 在https://stackoverflow.com/a/47363995/2402577上的回答类似的方法,以便不构建完整的列表,这也可能适用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")
于 2020-05-01T16:34:19.420 回答
-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
于 2017-05-30T02:15:32.847 回答