Дополнительно
Как перечислить все файлы каталога?
Как перечислить все файлы каталога в Python и добавить их в список
?
3474
20
Как перечислить все файлы каталога в Python и добавить их в список
?
os.listdir()
даст вам все, что находится в каталоге - файлы и директории.Если вам нужны только файлы, вы можете отфильтровать их, используя
os.path
:или вы можете использовать
os.walk()
, который выдаст два списка для каждого каталога, который он посетит, разделяя его на файлы и каталоги. Если вам нужен только верхний каталог, вы можете просто прервать его в первый раз, когда он выдаст списокЯ предпочитаю использовать модуль
glob
, поскольку он выполняет сопоставление и расширение шаблонов.Он вернет список с запрошенными файлами:
вернет список всех файлов и каталогов в "somedirectory".
<ч/>
Как получить все файлы (и каталоги) в текущем каталоге (в Python 3)
Следующие, несколько простых методов для извлечения только файлов в текущей директории, используя функцию
ОС
иlistdir ()
, в Python 3. Дальнейшие исследования продемонстрируют, как вернуть папки в Каталоге, но вы не имеете файл в подкаталоге, для этого вы можете использовать обсуждаться позже).Я нашел Глоб легче выбрать файл того же типа или с чем-то общим. Посмотрите на следующий пример:
Функция Now возвращает список файлов, которые совпали с строку вы передаете в качестве аргумента
Как вы заметили, вы не'т иметь полный путь к файлу в коде выше. Если вам нужно иметь абсолютный путь, вы можете использовать другую функцию ОС
.module путь "под названием" _getfullpathname, ставишь файл, который вы получаете от ос.listdir()
в качестве аргумента. Есть и другие способы получить полный путь, как мы будем проверять позже (Я заменил, как полагают mexmex, _getfullpathname сabspath
).Я нахожу это очень полезным, чтобы найти материал во многих каталогах, и это помогло мне найти файл, о котором я не'т помню название:
и GT;###
ОС.listdir()
: получение файлов в текущем каталоге (в Python 2)В Python 2, Если вы хотите, чтобы список файлов в текущем каталоге, вы должны дать аргумент как '.' или операционной системы.функция getcwd() в ОС.listdir способ.
и GT;###
ОС.прогулка('.')
- текущий каталоги GT;###
ОС.прогулка
- получить полный путь - все файлы в подразделе Дирс**и GT;###
ОС.listdir()
- вам только txt файлыЕсли я нужен абсолютный путь к файлам:
С осмыслением список:
Кроме того, использование
pathlib.Путь()
вместоpathlib.Путь (фильм".&и")
В этом примере, мы смотрим на количество файлов, которые включены во все директории и ее поддиректориях.
Скрипт, чтобы навести порядок в компьютере найти все файлы определенного типа (по умолчанию: PPTX) и копировать их в новую папку.
В случае, если вы хотите создать текстовый файл со всеми именами файлов:
С помощью этой функции можно создать файл txt, который будет иметь название типа файла, который вы ищите (исх. pngfile.txt) со всеми полный путь всех файлов этого типа. Это может быть полезно иногда, я думаю.
Однострочное решение сделать только список файлов (без поддиректорий):
питон имена файлов = следующий(ОС.прогулка(путь))[2]
или абсолютного пути:питон пути = [ОС.путь.присоединиться(путь, Fn) для ФН в следующем(ОС.прогулка(путь))[2]]
Получение полного пути к файлу из директории и всех ее поддиректорий
Тот путь, который я предоставил в приведенной выше функции содержатся 3 файла— два из них в корневом каталоге, и еще в папку под названием "в папке&.и" Теперь вы можете делать вещи, как:
печать full_file_paths`, которая будет печатать список:
['/пользователи/Джонни/рабочий стол/тест/файл1.тхт', '/пользователи/Джонни/рабочий стол/тест/файл2.тхт', '/пользователи/Джонни/рабочий стол/тест/папку/файл file3.дат']
Если вы'd, как, вы можете открыть и прочитать содержимое, или сосредоточиться только на файлы с расширением и".дат" и как в коде ниже:
`/Пользователи/Джонни/рабочий стол/тест/папку/файл file3.дать
Начиная с версии 3.4 есть встроенные итераторы для этого, которые намного более эффективны, чем ОС
.listdir()
:pathlib
: новое в версии 3.4.По данным ОПТОСОЗ 428, цель [
pathlib
] библиотекаpathlib - обеспечить простую иерархию классов для обработки путей файловой системы и общие операции пользователей над ними.ОС.scandir()
: новое в версии 3.5.Обратите внимание, что ОС
.прогулка()
использует ОС.scandir()
вместоОС.listdir()
начиная с версии 3.5, и его скорость увеличилась на 2-20 раз по данным [Пеп 471].Позвольте мне также рекомендую прочитать ShadowRanger'комментарий ниже.
Предварительные заметки
в
ОС.listdir
ОС.scandir
(`ОС.listdir на старых версиях).listdir
win32file.FindFilesW
- часть [гитхаб]: mhammond/pywin32 - питон для Windows (pywin32) расширения, которая является питон обертку по WinAPIсОС.listdir " и " ОС.scandir
использовать каталог файлов / вызове readdir / closedir ([ср. документы]: FindFirstFileW функция / [ср. документы]: FindNextFileW функция / [ср. документы]: FindClose функция) (через [гитхаб]: питон/с CPython - (мастер) с CPython/модули/posixmodule.с)win32file.FindFilesW
использует эти (выиграть специфические) функции, а также (Через [на GitHub]: mhammond/pywin32 - (мастер) pywin32/win32/src/win32file.i)filter_func=лямбда х: правда (это не'т прокладки из ничего) и внутри *\запросе\_dir\_content* что-то вроде:
если не filter_func(entry_with_path): продолжение` (если функция не для одной записи, он будет пропущен), но чем сложнее код, тем больше времени потребуется для выполненияДругие подходы:
команда grep
/она
) или форматирование вывода может быть сделано с обеих сторон, но я'м не собираюсь настаивать на этом. Кроме того, я намеренно использовалОС.система
вместоподпроцесса.К popen
.Мне очень понравилось adamk'ы ответ, предполагая, что вы используете
Глоб()
, из модуля с одноименным названием. Это позволяет шаблону с*
ы.Но как другие люди указали в комментариях,
Глоб()
может споткнуться за несовместимых направлений Слэш. Чтобы помочь с этим, я предлагаю вам использоватьприсоединяйтесь()
иexpanduser()
функции в ОС.модуль Pathи возможно
функция getcwd()функция в модуле
ОС`, а также.В качестве примеров:
Выше просто ужасен - путь был жестко и будет работать только на Windows между названием диска и
\
ы не жестко закодировано в пути.Выше работает лучше, но это зависит от пользователей имя папки``, который часто встречается на Windows и не так часто встречается на других ОС. Он также использует пользователь, имеющий определенное имя, "администратор".
Это отлично работает на всех платформах.
Еще один замечательный пример, который отлично работает на разных платформах и делает что-то немного по-другому:
Надеюсь, эти примеры помогут вам увидеть силу нескольких функций вы можете найти в стандартной библиотеке Python-модулей.
Если вы ищете реализацией Python найти этот рецепт я использую очень часто:
Поэтому я сделал PyPI пакет из нее, а также репозитория GitHub. Я надеюсь, что кто-то считает его потенциально полезным для этого кода.
Возвращает список абсолютные пути к каталогам, не рекурсивно в подкаталогах
Для больших результатов, вы можете использовать
listdir (метод)
модуляОС
вместе с генератором (генератор мощный iterator, который сохраняет свое состояние, помните?). Следующий код прекрасно работает с обеими версиями: Python 2 и Python 3.Здесь'ы код:
Метод
listdir()
возвращает список записей для данного каталога. ОС метод.путь.isfile()
возвращаетtrue
, если данная запись представляет собой файл. Ивыход
оператор завершает функцию, но сохраняет свое текущее состояние, и она возвращает только имя записи определен как файл. Все вышесказанное позволяет нам петлю на себя функцию генератора.Здесь я использую рекурсивную структуру.
Мудрый учитель сказал мне однажды, что:
Таким образом, я добавлю решение в подмножество проблема: довольно часто, мы всего лишь хотим проверить, является ли файл соответствует строке начало и конец строки, не вдаваясь в подкаталогах. Таким образом, мы хотели бы функцию, которая возвращает список имен файлов, таких как:
Если вы заботитесь, чтобы сначала объявить две функции, это может быть сделано:
Это решение может быть легко обобщено с помощью регулярных выражений (и вы, возможно, захотите, чтобы добавить
узор
аргумент, если вы не хотите, чтобы ваши шаблоны, чтобы всегда держаться в начало или конец имени файла).Использование генераторов
Еще один очень читаемый вариант для Python 3.4+ использует pathlib.Путь.Глоб:
Это просто сделать более конкретными, например, только искать исходные файлы Python, которые не являются символическими ссылками, а также во всех подкаталогах:
Здесь'Мой генерал-целевая функция для этого. Он возвращает список путей к файлам, а не имена, так как я обнаружил, что, чтобы быть более полезным. Он имеет несколько необязательных аргументов, которые делают его универсальным. Например, я часто использую его аргументы как
шаблон='*.тхт'
илиподпапки=правда
.dircache есть "устаревшим с версии 2.6: модуль dircache был удален в Python 3.0.&ьquot;
Для python2: установите типун rglob