Я пытаюсь получить список файлов в каталоге, используя Python, но мне не нужен список ВСЕХ файлов.
По сути, я хочу сделать что-то вроде следующего, но использовать Python, а не выполнять ls.
ls 145592*.jpg
Если для этого нет встроенного метода, я сейчас подумываю написать цикл for для итерации по результатам os.listdir()
и добавления всех соответствующих файлов в новый список.
Однако в этом каталоге много файлов, и поэтому я надеюсь, что есть более эффективный метод (или встроенный метод).
Ответы:
glob.glob('145592*.jpg')
источник
glob.glob('145592*.jpg')
печатает полный абсолютный путь к файлам, аls 145592*.jpg
печатает только список файлов.glob()
что для фильтрации по шаблону используется просто listdir + fnmatch, а не специальные вызовы операционной системы. Например, в WindowsFindFirstFile
API позволяет указывать подстановочные знаки, чтобы ОС выполняла фильтрацию напрямую и, предположительно, более эффективно (я не думаю, что в Linux есть эквивалент).glob.glob()
это определенно способ сделать это (согласно Игнасио). Однако, если вам нужно более сложное сопоставление, вы можете сделать это с пониманием списка иre.match()
, что-то вроде этого:Более гибкий, но, как вы заметили, менее эффективный.
источник
[0-9]+
[0123456789]
последовательности ( см. Документы ), а также имеетfnmatch.filter()
функцию, которая делает этот цикл немного более эффективным.Будь проще:
Я предпочитаю эту форму понимания списка, потому что она хорошо читается на английском языке.
Я читаю четвертую строку как: Для каждого fn в os.listdir для моего пути, дайте мне только те, которые соответствуют любому из моих включенных расширений.
Для начинающих программистов на python может быть трудно привыкнуть к использованию списочных представлений для фильтрации, и это может иметь некоторые накладные расходы памяти для очень больших наборов данных, но для перечисления каталога и других простых задач фильтрации строк, списочные понимания приводят к более чистым документируемый код.
Единственное, что есть в этом дизайне, это то, что он не защищает вас от ошибки при передаче строки вместо списка. Например, если вы случайно конвертируете строку в список и заканчиваете проверкой всех символов строки, вы можете получить массу ложных срабатываний.
Но лучше иметь проблему, которую легко решить, чем решение, которое трудно понять.
источник
any()
, потому что онаstr.endswith()
имеет последовательность окончаний.if fn.endswith(included_extentensions)
более чем достаточноstr.endswith(seq)
которое указал Мартейн, это не правильно, потому что файл должен заканчиваться.ext
тем, чтобы иметь это расширение. Этот код также найдет (например) файл с именем «myjpg» или каталог с именем «png». Чтобы исправить, просто добавьте каждое расширениеincluded_extensions
к.
.included_extensions
противincluded_extentsions
? Жаль, потому что иначе это мой предпочтительный ответ.Другой вариант:
https://docs.python.org/3/library/fnmatch.html
источник
glob
делает в одной строке.glob
возвращает полный путь, а неos.listdir
просто возвращает имя файла. По крайней мере, это то, что происходит в Python 2.Фильтр с
glob
модулем:Импорт глобуса
Дикие карты:
Расширение Fiter
.txt
:Один персонаж
Диапазоны номеров
Алфавитный ряд
источник
Предварительный код
Решение 1 - использовать «шар»
Решение 2 - используйте «os» + «fnmatch»
Вариант 2.1 - Поиск в текущем каталоге
Вариант 2.2 - рекурсивный поиск
результат
Решение 3 - использовать «pathlib»
Ноты:
источник
используйте os.walk для рекурсивного перечисления ваших файлов
источник
file.endswith(alist_filter)
достаточно.Это даст вам список файлов JPG с их полным путем. Вы можете заменить
x[0]+"/"+f
сf
только за имена файлов. Вы также можете заменитьf.endswith(".jpg")
любое строковое условие, какое пожелаете.источник
Вам также может понравиться более высокоуровневый подход (я реализовал и упаковал как findtools ):
может быть установлен с
источник
Имена файлов с расширениями «jpg» и «png» в «path / to / images»:
источник
Вы можете использовать pathlib, который доступен в стандартной библиотеке Python 3.4 и выше.
источник
Вы можете определить шаблон и проверить его. Здесь я взял и начальный и конечный шаблон и ищу их в имени файла. FILES содержит список всех файлов в каталоге.
источник
Как насчет str.split ()? Нечего импортировать.
источник
f.endswith('.jpg')
(но также и выбораfilename.jpg.ext
)Вы можете использовать subprocess.check_ouput () как
Конечно, строка между кавычками может быть чем угодно, что вы хотите выполнить в оболочке, и сохранить результат.
источник
ls
Выходные данные не должны быть проанализированы .