我到处寻找这个答案却找不到。
我正在尝试创建一个脚本来搜索特定的子文件夹,然后检查它是否包含任何文件,如果是,则写出文件夹的路径。我已经找到了子文件夹搜索部分,但检查文件是困扰我。
我已经找到了关于如何检查文件夹是否为空的多个建议,并且我已经尝试修改脚本以检查文件夹是否为空,但是我没有得到正确的结果。
这是最接近的脚本:
for dirpath, dirnames, files in os.walk('.'):
if os.listdir(dirpath)==[]:
print(dirpath)
这将列出所有空的子文件夹,但如果我尝试将其更改为:
if os.listdir(dirpath)!=[]:
print(dirpath)
它将列出所有内容 - 而不仅仅是那些包含文件的子文件夹。
如果有人能指出我正确的方向,我真的很感激。
如果重要的话,这适用于Python 3.4。
感谢你给与我的帮助。
'files'已经告诉你目录中有什么。检查一下:
for dirpath, dirnames, files in os.walk('.'):
if files:
print(dirpath, 'has files')
if not files:
print(dirpath, 'is empty')
您可以使用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()}
因为无论如何你必须走树,我们构建了一组父目录,其中存在一个文件,该目录产生一组包含文件的目录 - 然后按照你的意愿对结果进行操作。
entities = os.listdir(dirpath)
for entity in entities:
if os.path.isfile(entity):
print(dirpath)
break
如果您可以删除该目录,则可以使用以下命令:
try:
os.rmdir( submodule_absolute_path )
is_empty = True
except OSError:
is_empty = False
if is_empty:
pass
如果目录为空,os.rmdir只会删除一个目录,否则会抛出OSError异常。
您可以在以下方面找到关于此的讨论:
例如,当您计划执行git克隆时,删除空目录很好,但如果您事先检查目录是否为空,则不能删除空目录,因此您的程序不会抛出空目录错误。
添加到@Jon Clements的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
类似的想法结果{}和[]给出了相同的结论:
你可以使用这个简单的代码:
dir_contents = [x for x in os.listdir('.') if not x.startswith('.')]
if len(dir_contents) > 0:
print("Directory contains files")
它检查当前工作目录(.
)中的文件和目录。您可以在.
中更改os.listdir()
以检查任何其他目录。