我到处搜索这个答案,但找不到。
我试图想出一个搜索特定子文件夹的脚本,然后检查它是否包含任何文件,如果是,则写出文件夹的路径。我已经找到了子文件夹搜索部分,但检查文件让我很难过。
我找到了关于如何检查文件夹是否为空的多个建议,并且我已尝试修改脚本以检查文件夹是否为空,但我没有得到正确的结果。
这是最接近的脚本:
for dirpath, dirnames, files in os.walk('.'):
if os.listdir(dirpath)==[]:
print(dirpath)
这将列出所有空的子文件夹,但如果我尝试将其更改为:
if os.listdir(dirpath)!=[]:
print(dirpath)
它会列出所有内容 - 而不仅仅是那些包含文件的子文件夹。
如果有人能指出我正确的方向,我真的很感激。
这适用于Python 3.4,如果重要的话。
感谢您提供任何帮助。
答案 0 :(得分:22)
'files'已经告诉你目录中的内容。检查一下:
for dirpath, dirnames, files in os.walk('.'):
if files:
print(dirpath, 'has files')
if not files:
print(dirpath, 'is empty')
答案 1 :(得分:9)
您可以使用Python 3.4中引入的新pathlib
库来递归提取所有非空子目录,例如:
import pathlib
root = pathlib.Path('some/path/here')
non_empty_dirs = {str(p.parent) for p in root.rglob('*') if p.is_file()}
由于你无论如何都必须走树,我们构建了一组父文件目录,其中存在一个文件,该目录产生一组包含文件的目录 - 然后按照你的意愿对结果进行操作。
答案 2 :(得分:4)
entities = os.listdir(dirpath)
for entity in entities:
if os.path.isfile(entity):
print(dirpath)
break
答案 3 :(得分:4)
如果您可以删除目录,可以使用:
try:
os.rmdir( submodule_absolute_path )
is_empty = True
except OSError:
is_empty = False
if is_empty:
pass
os.rmdir仅删除目录为空,否则会引发OSError异常。
您可以在以下网址找到有关此问题的讨论:
例如,当您计划进行git克隆时,删除空目录就没问题,但如果您事先检查目录是否为空,则不能删除空目录,因此您的程序不会抛出空目录错误。
答案 4 :(得分:4)
在@Jon Clements的pathlib答案中,我想使用pathlib检查文件夹是否为空,但未创建集合:
from pathlib import Path
is_empty = not bool(sorted(Path('some/path/here').rglob('*')))
sorted(Path(path_here).rglob('*'))返回已排序的PosixPah项目的列表。如果没有项目,则返回一个空列表,即False。因此,如果路径为空,则is_empty为True,如果路径为空,则为false
相似的想法结果{}和[]给出相同的结果:
答案 5 :(得分:2)
您可以使用以下简单代码:
dir_contents = [x for x in os.listdir('.') if not x.startswith('.')]
if len(dir_contents) > 0:
print("Directory contains files")
它检查当前工作目录(.
)中的文件和目录。您可以在.
中更改os.listdir()
来检查其他目录。
答案 6 :(得分:2)
使用pathlib
,可以按以下步骤进行操作:
import pathlib
# helper function
def is_empty(_dir: pathlib.PAth) -> bool:
return not bool([_ for _ in _dir.iterdir()])
# create empty dir
_dir = pathlib.Path("abc")
# check if dir empty
is_empty(_dir) # will retuen True
# add file s to folder and call it again
答案 7 :(得分:0)
您可以直接使用生成器,而不必先转换为集合或(有序)列表:
from pathlib import Path
p = Path('abc')
def check_dir(p):
if not p.exists():
print('This directory is non-existent')
return
try:
next(p.rglob('*'))
except StopIteration:
print('This directory is empty')
return
print('OK')
答案 8 :(得分:0)
检查文件夹是否包含文件:
react-navigation
答案 9 :(得分:0)
我有Bash checking if folder has contents的回答。
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")
答案 10 :(得分:0)
现在可以在Python3.5+中更有效地完成此操作,因为无需建立目录内容列表即可查看其是否为空:
import os
def is_dir_empty(path):
with os.scandir(path) as scan:
return next(scan, None) is None