Как выбрать все файлы в папке, включая файлы без расширения, исключив каталоги?

Я использую glob.glob(patch+'*.*'), что позволяет выбрать только файлы с расширением.

Можно ли одним запросом выбрать все файлы, включая те, что без расширения, или нужно использовать цикл для проверки типа каждого объекта (файл или папка)?


Ответы (2 шт):

Автор решения: Amgarak

Придётся отсеивать. Можно не циклом, а списковым включением через атрибут is_file() © strawdog

В комментариях @strawdog уже ответил на вопрос, так что продемонстрирую реализацию:

from pathlib import Path
from typing import NamedTuple, List

class DirectoryContents(NamedTuple):
    files: List[Path]
    directories: List[Path]

def get_directory_contents(path: Path) -> DirectoryContents:
    files = [f for f in path.iterdir() if f.is_file()]
    directories = [d for d in path.iterdir() if d.is_dir()]
    return DirectoryContents(files=files, directories=directories)

path = Path(r'C:\Users\Amgarak\Desktop')
contents = get_directory_contents(path)

print("Файлы:")
for file in contents.files:
    print(file)

print("\nПапки:")
for directory in contents.directories:
    print(directory)

Вывод:

Файлы:
C:\Users\Amgarak\Desktop\1.py
C:\Users\Amgarak\Desktop\13.py
C:\Users\Amgarak\Desktop\13.spec
C:\Users\Amgarak\Desktop\13.xlsx
и т.д..

Папки:
C:\Users\Amgarak\Desktop\Amgarak
C:\Users\Amgarak\Desktop\build
C:\Users\Amgarak\Desktop\dist
и т.д..
→ Ссылка
Автор решения: Fox Fox

Готовый консольный скрипт для тестирования:

import os

print("-" * 60 + "\nСписок всех файлов в подкаталогах заданного каталога:\n" + "-" * 60)

directory = r"D:\\DOCUMENTS"
if not os.path.exists(directory): print(f"Каталог {directory} не найден!")
else:
 lst_files = [os.path.join(root, file) for root, _, files in os.walk(directory) for file in files]
 if lst_files:
  for i in lst_files: print(i)
 else: print(f"Каталог {directory} не содержит файлов!")

print("\nНажмите любую клавишу для продолжения...")
os.system("pause > nul" if os.name == "nt" else "read > /dev/null")
→ Ссылка