所有
在删除目录之前检查目录中是否有数据的最佳方法是什么?我正在浏览几页以找到使用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 :(得分:55)
答案 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