Список только файлов в каталоге?
Есть ли способ перечислить файлы (не каталоги) в каталоге с Python? Я знаю, что я мог бы использовать os.listdir
и цикл os.path.isfile()
s, но если там что-то более простое (например, функция os.path.listfilesindir
или что-то еще), вероятно, было бы лучше.
Ответы
Ответ 1
Это простое выражение генератора:
files = (file for file in os.listdir(path)
if os.path.isfile(os.path.join(path, file)))
for file in files: # You could shorten this to one line, but it runs on a bit.
...
Или вы могли бы сделать генераторную функцию, если она вам подходит:
def files(path):
for file in os.listdir(path):
if os.path.isfile(os.path.join(path, file)):
yield file
Тогда просто:
for file in files(path):
...
Ответ 2
files = next(os.walk('..'))[2]
Ответ 3
Использование pathlib в Windows следующим образом:
files = (x для x в Path ( "ваш_path" ), если x.is_file())
Генерирует ошибку:
TypeError: объект "WindowsPath" не является итерируемым
Вам лучше использовать Path.iterdir()
filePath = Path("your_path")
if filePath.is_dir():
files = list(x for x in filePath.iterdir() if x.is_file())
Ответ 4
Вы можете попробовать pathlib, в котором также есть много полезного материала.
Pathlib - это объектно-ориентированная библиотека для взаимодействия с путями файловой системы. Чтобы получить файлы в текущем каталоге, можно сделать:
from pathlib import *
files = (x for x in Path(".") if x.is_file())
for file in files:
print(str(file), "is a file!")
Это, на мой взгляд, больше Pythonic, чем использование os.path
.
Смотрите также: PEP 428.
Ответ 5
Используя pathlib
, самый короткий способ для отображения только файлов:
[x for x in Path("your_path").iterdir() if x.is_file()]
с поддержкой глубины, если это необходимо.
Ответ 6
Это даст только список файлов
import glob
#mydir is the location to search
files_only = glob.glob(mydir+'\\*.*')
Ответ 7
Для особого случая работы с файлами в текущем каталоге вы можете сделать это как простое понимание списка из одной строки:
[f for f in os.listdir(os.curdir) if os.path.isfile(f)]
В противном случае в более общем случае пути к каталогам и имена файлов должны быть объединены:
dirpath = '~/path_to_dir_of_interest'
files = [f for f in os.listdir(dirpath) if os.path.isfile(os.path.join(dirpath, f))]