Как выбрать все файлы в папке, включая файлы без расширения, исключив каталоги?
Я использую 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")