2016-01-31 2 views
1

Так что я хочу захватить первый файл под каталогом в Python. Я знаю, что я могу сделать вот так:Python: как получить первый файл в каталоге?

first_file = [join(path, f) for f in os.listdir(path) if isfile(join(path, f))][0] 

Но это медленно. Есть ли лучшее решение? Благодаря!

+0

благодаря @gtlambert. Очень быстро. Я как раз собирался отредактировать его: P – tnq177

ответ

3

Вы можете использовать next():

first_file = next(join(path, f) for f in os.listdir(path) if isfile(join(path, f))) 

Обратите внимание, что если нет файлов в каталоге было бы бросить StopIteration исключение. Либо обрабатывать его, или установить значение по умолчанию :

first_file = next((join(path, f) for f in os.listdir(path) if isfile(join(path, f))), 
        "default value here") 
+1

oh, имеет ли указанный выше код внутри '' 'next''' итератор? – tnq177

+1

@ tnq177, а 'next()' получит в этом случае значение первого итератора или выбросит исключение 'StopIteration'. – alecxe

+0

Прохладный! Большое спасибо, приятель. Я только что проверил и увидел результат. Это быстрее. Я не знал, что выше синтаксис генерирует итератор. Итак, что мы понимаем в переписке в основном, превращая итератор в список? PS: Я должен подождать еще 7 минут, чтобы принять ваш ответ. – tnq177