在Python中查找空目录
全部, 在删除目录之前,检查目录中是否有数据的最佳方法是什么?我用wget浏览了几个页面,找到了一些图片,当然每个页面上都没有图片,但是目录仍然被创建在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)
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 ;