Подтвердить что ты не робот

Как проверить, содержит ли папка файлы с использованием python 3

Я искал всюду для ответа, но не могу найти его.

Я пытаюсь найти script, который будет искать определенную подпапку, а затем проверить, содержит ли она какие-либо файлы и если да, напишите путь к папке. Я понял, что часть поиска вложенных папок вычислена, но проверка файлов превзошла меня.

Я нашел несколько советов о том, как проверить, что папка пуста, и я попытался изменить сценарии, чтобы проверить, не является ли папка пустой, но я не получаю правильных результатов.

Вот ближайший script:

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

Здесь перечислены все пустые вложенные папки, но если я попытаюсь изменить их на:

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

он перечислит все - не только вложенные папки, содержащие файлы.

Я был бы очень признателен, если бы кто-то мог указать мне в правильном направлении.

Это для Python 3.4, если это имеет значение.

Спасибо за любую помощь, которую вы можете мне дать.

4b9b3361

Ответ 1

'files' уже сообщает вам, что находится в каталоге. Просто проверьте:

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

Ответ 2

Вы можете использовать новую библиотеку pathlib, представленную в Python 3.4, для рекурсивного извлечения всех непустых подкаталогов, например:

import pathlib

root = pathlib.Path('some/path/here')
non_empty_dirs = {str(p.parent) for p in root.rglob('*') if p.is_file()}

Поскольку вам все равно нужно ходить по дереву, мы создаем набор родительских каталогов, в которых присутствует файл, что приводит к набору каталогов, содержащих файлы, - тогда делайте, как хотите, результат.

Ответ 3

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-клон, но не в том случае, если вы заранее проверяете, является ли каталог пустым, поэтому ваша программа не выдает ошибку пустого каталога.

Ответ 5

Добавляя к ответу @Jon Clements pathlib, я хотел проверить, является ли папка пустой с pathlib, но без создания набора:

from pathlib import Path

is_empty = not bool(sorted(Path('some/path/here').rglob('*')))

sorted (Path (path_here).rglob('*')) возвращает список отсортированных элементов PosixPah. Если нет элементов, он возвращает пустой список, который является ложным. Таким образом, is_empty будет True, если путь пуст, и false, если путь имеет что-то

Аналогичные результаты идеи {} и [] дают то же самое: enter image description here

Ответ 6

Вы можете использовать этот простой код:

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

Он проверяет файлы и каталоги в текущем рабочем каталоге (.). Вы можете изменить . в os.listdir() чтобы проверить любой другой каталог.

Ответ 7

Вы можете напрямую использовать генератор вместо того, чтобы сначала преобразовывать в набор или (упорядоченный) список:

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