如何使用python 3检查文件夹是否包含文件

问题描述 投票:25回答:6

我到处寻找这个答案却找不到。

我正在尝试创建一个脚本来搜索特定的子文件夹,然后检查它是否包含任何文件,如果是,则写出文件夹的路径。我已经找到了子文件夹搜索部分,但检查文件是困扰我。

我已经找到了关于如何检查文件夹是否为空的多个建议,并且我已经尝试修改脚本以检查文件夹是否为空,但是我没有得到正确的结果。

这是最接近的脚本:

for dirpath, dirnames, files in os.walk('.'):
if os.listdir(dirpath)==[]:
    print(dirpath)

这将列出所有空的子文件夹,但如果我尝试将其更改为:

if os.listdir(dirpath)!=[]:
    print(dirpath)

它将列出所有内容 - 而不仅仅是那些包含文件的子文件夹。

如果有人能指出我正确的方向,我真的很感激。

如果重要的话,这适用于Python 3.4。

感谢你给与我的帮助。

python python-3.4
6个回答
22
投票

'files'已经告诉你目录中有什么。检查一下:

for dirpath, dirnames, files in os.walk('.'):
    if files:
        print(dirpath, 'has files')
    if not files:
        print(dirpath, 'is empty')

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()}

因为无论如何你必须走树,我们构建了一组父目录,其中存在一个文件,该目录产生一组包含文件的目录 - 然后按照你的意愿对结果进行操作。


4
投票
entities = os.listdir(dirpath)
for entity in entities:
    if os.path.isfile(entity):
        print(dirpath)
        break

4
投票

如果您可以删除该目录,则可以使用以下命令:

try:
    os.rmdir( submodule_absolute_path )
    is_empty = True

except OSError:
    is_empty = False

if is_empty:
    pass

如果目录为空,os.rmdir只会删除一个目录,否则会抛出OSError异常。

您可以在以下方面找到关于此的讨论:

  1. https://bytes.com/topic/python/answers/157394-how-determine-if-folder-empty

例如,当您计划执行git克隆时,删除空目录很好,但如果您事先检查目录是否为空,则不能删除空目录,因此您的程序不会抛出空目录错误。


3
投票

添加到@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

类似的想法结果{}和[]给出了相同的结论:


2
投票

你可以使用这个简单的代码:

dir_contents = [x for x in os.listdir('.') if not x.startswith('.')]
if len(dir_contents) > 0:
    print("Directory contains files")

它检查当前工作目录(.)中的文件和目录。您可以在.中更改os.listdir()以检查任何其他目录。

© www.soinside.com 2019 - 2024. All rights reserved.