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

时间:2014-09-04 21:36:53

标签: python python-3.4

我到处搜索这个答案,但找不到。

我试图想出一个搜索特定子文件夹的脚本,然后检查它是否包含任何文件,如果是,则写出文件夹的路径。我已经找到了子文件夹搜索部分,但检查文件让我很难过。

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

这是最接近的脚本:

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

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

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

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

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

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

感谢您提供任何帮助。

11 个答案:

答案 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异常。

您可以在以下网址找到有关此问题的讨论:

  1. https://bytes.com/topic/python/answers/157394-how-determine-if-folder-empty
  2. 例如,当您计划进行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

相似的想法结果{}和[]给出相同的结果: enter image description here

答案 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')

enter image description here

答案 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