Python os walk все файлы

Перебирать файлы в каталоге в Python

В этом посте будет обсуждаться, как перебирать файлы в каталоге в Python.

1. Использование os.listdir() функция

Простое решение для перебора файлов в каталоге — использование os.listdir() функция. Он возвращает список файлов и подкаталогов, присутствующих в указанном каталоге. Чтобы получить только файлы, вы можете отфильтровать список с помощью os.path.isfile() функция:

Чтобы получить файлы определенного расширения, скажите .txt , вы можете добавить условие для проверки расширения файла.

2. Использование os.scandir() функция

Начиная с Python 3.5, рассмотрите возможность использования os.scandir() функция, когда вам нужна информация о типе файла или атрибуте файла. Он возвращает записи каталога и информацию об атрибутах файла, обеспечивая значительно более высокую производительность по сравнению с os.listdir() .

3. Использование pathlib модуль

В Python 3.4 вы также можете использовать pathlib модуль. Чтобы перебрать файлы в каталоге, используйте Path.glob(pattern) функция, которая размещает заданный относительный шаблон в указанном каталоге и дает соответствующие файлы.

Читайте также:  Php обойти весь массив

В следующем примере показано, как фильтровать и отображать текстовые файлы, находящиеся в каталоге.

В качестве альтернативы вы можете использовать Path.iterdir() функция, которая возвращает объекты пути содержимого каталога. Чтобы получить расширение файла, используйте suffix имущество:

4. Использование os.walk() функция

Если вам нужно также искать подкаталоги, рассмотрите возможность использования os.walk() функция. Это дает 3-кортеж (dirpath, dirnames, filenames) для всего, что доступно из указанного каталога, где dirpath это путь к каталогу, dirnames это список имен подкаталогов в dirpath, и filenames представляет собой список имен файлов, не входящих в каталоги, в каталоге dirpath.

Источник

Получение списка файлов в каталоге и подкаталогах в Python

Чтобы получить список всех файлов в папке или каталоге и его подпапках или подкаталогах в Python, мы будем использовать функцию os.walk(), которая создает итератор по текущему каталогу, его подпапкам и файлам.

В этом руководстве мы рассмотрим некоторые примеры, демонстрирующие, как получить список всех файлов в каталоге и его подкаталогах.

Пример 1

В этом примере мы возьмем путь к каталогу и попытаемся рекурсивно перечислить все файлы в каталоге и его подкаталогах.

import os path ="C:/workspace/python" #we shall store all the file names in this list filelist = [] for root, dirs, files in os.walk(path): for file in files: #append the file name to the list filelist.append(os.path.join(root,file)) #print all the file names for name in filelist: print(name)

В приведенной выше программе мы использовали вложенный For Loop.

C:\pythonexamples\python-create-directory.png C:\pythonexamples\python-remove-file.png C:\pythonexamples\scatter-plot-example.py C:\pythonexamples\tkinter-example.py C:\pythonexamples\sample\example.py C:\pythonexamples\sample\example1.py

Пример 2: с определенным расширением

В этом примере мы возьмем путь к каталогу и попытаемся рекурсивно перечислить все файлы с определенным расширением .py в этом каталоге и его подкаталогах.

import os path ="C:\workspace\python" for root, dirs, files in os.walk(path): for file in files: if(file.endswith(".py")): print(os.path.join(root,file))
C:\pythonexamples\scatter-plot-example.py C:\pythonexamples\tkinter-example.py C:\pythonexamples\sample\example.py C:\pythonexamples\sample\example1.py

В этом руководстве мы узнали получения списка всех файлов в каталоге и его подкаталогах.

Источник

Получение списка файлов в директории на Python

Всё чаще современные программисты предпочитают работать с языком программирования Python, потому что он очень гибкий, позволяющий легко взаимодействовать с операционной системой. Он также поставляется с функциями по работе с файловой системой. Решение задачи распечатки списка файлов в директории можно решить используя разные модули: os, subprocess, fnmatch и pathlib. Следующие решения демонстрируют, как успешно воспользоваться этими модулями.

Применение os.walk()

Модуль os содержит длинный список методов, которые касаются работы с файловой системой и операционной системой. Один из них walk(), возвращающий имена файлов в дереве каталогов, двигаясь по дереву сверху вниз или снизу вверх (сверху вниз по умолчанию).

os.walk() возвращает список из трех элементов: имя корневого каталога, список имен вложенных папок и список файлов в текущем каталоге. Он одинаково хорошо работает с интерпретаторами Python 2 и 3.

import os for root, dirs, files in os.walk("."): for filename in files: print(filename) 

Использование командной строки, через subprocess

Модуль subprocess позволяет выполнить системную команду и собрать её результат. В нашем случае вызываемая системная команда выглядит следующим образом:

Инструкция ls -p . распечатывает список файлов текущего каталога, добавляя разделитель / в конце имени каждого подкаталога, которые нам понадобится на следующем шаге. Вывод этого вызова передается команде grep, которая отфильтровывает данные по мере поступления. Параметры -v / $ исключают все имена записей, которые заканчиваются разделителем /. Фактически / $ — регулярное выражение, которое соответствует всем строкам, содержащим символ / самым последним символом в строке, который определяется символом $.

Модуль subprocess позволяет строить настоящие конвейеры, а также соединять входные и выходные потоки, как это делается в командной строке. Вызов метода subprocess.Popen() открывает соответствующий процесс и определяет два параметра stdin и stdout.

Первая переменная ls определяет процесс выполнения ls –p для захвата stdout в конвейере. Поэтому поток stdout определяется как subprocess.PIPE. Вторая переменная grep также определяется как процесс, но вместо этого выполняет инструкцию grep –v /$.

Чтобы прочитать вывод команды ls из конвейера, поток stdin grep присваиваивается в ls.stdout. В заключение, переменная endOfPipe считывает вывод команды grep из grep.stdout, затем распечатывается в stdout циклом for.

import subprocess # определение команды ls ls = subprocess.Popen(["ls", "-p", "."], stdout=subprocess.PIPE, ) # определение команды grep grep = subprocess.Popen(["grep", "-v", "/$"], stdin=ls.stdout, stdout=subprocess.PIPE, ) # чтение из данных из потока stdout endOfPipe = grep.stdout # распечатка файлов в строку for line in endOfPipe: print(line) 
$ python find-files3.py find-files2.py find-files3.py find-files4.py . 

Данное решение работает достаточно хорошо с Python 2 и 3, но его можно улучшить. Рассмотрим другие варианты.

Комбинация os и fnmatch

Решение, использующее подпроцессы, элегантно, но требует большого количества кода. Вместо этого, давайте объединим методы из двух модулей os и fnmatch. Этот вариант также работает с Python 2 и 3.

В качестве первого шага, импортируем модули os и fnmatch. Далее определим каталог, в котором нужно перечислить файлы, используя os.listdir(), а также шаблон для фильтрации файлов. В цикле for выполняется итерация списка записей, хранящихся в переменной listOfFiles.

В завершение, с помощью fnmatch отфильтровываются искомые записи и распечатываются соответствующие записи в stdout.

import os, fnmatch listOfFiles = os.listdir('.') pattern = "*.py" for entry in listOfFiles: if fnmatch.fnmatch(entry, pattern): print(entry) 
$ python find-files.py find-files.py find-files2.py find-files3.py . 

Использование os.listdir() и генераторов

Следующий вариант объединяет метод os.listdir() с функцией генератором. Код работает как с версиями 2, так и с 3 Python.

Как уже было сказано ранее, listdir() возвращает список записей для данного каталога. Метод os.path.isfile() возвращает True, если данная запись является файлом. Оператор yield завершает работу функции, но сохраняя текущее состояние и возвращает только имя записи являющейся файлом.

import os def files(path): for file in os.listdir(path): if os.path.isfile(os.path.join(path, file)): yield file for file in files("."): print(file) 

Использование pathlib

Модуль pathlib предназначен для парсинга, сборки, тестирования и иной работы с именами файлов и их путями, используя объектно-ориентированный API вместо низкоуровневых строковых операций. Начиная с Python 3 модуль находится в стандартной библиотеке.

В следующем листинге определяется текущий каталог точкой («.»). Затем метод iterdir() возвращает итератор, который возвращает имена всех файлов. Далее циклом for распечатываются имена файлов друг за другом.

import pathlib # определение пути currentDirectory = pathlib.Path('.') for currentFile in currentDirectory.iterdir(): print(currentFile) 

В качестве альтернативы, можно отфильтровать файлы по именам с помощью метода glob. Таким образом, получаем требуемые файлы. Например, в приведенном ниже коде перечисляются Python файлы в выбранном каталоге, указав шаблон «*.py» в glob.

import pathlib # определение пути currentDirectory = pathlib.Path('.') # определение шаблона currentPattern = "*.py" for currentFile in currentDirectory.glob(currentPattern): print(currentFile) 

Использование os.scandir()

В Python 3.6 добавлен новый метод scandir(), доступный из модуля os. Как понятно из названия он значительно упрощает получение списка файлов в каталоге.

Чтобы определить текущий рабочий каталог и сохранить его, инициализируем значение переменной path, для этого импортируем модуль os и вызовем функцию getcwd(). Далее, scandir() возвращает список записей для выбранного пути, которые проверяются на принадлежность файлу, используя метод is_file().

import os # определение текущей рабочей директории path = os.getcwd() # чтение записей with os.scandir(path) as listOfEntries: for entry in listOfEntries: # печать всех записей, являющихся файлами if entry.is_file(): print(entry.name) 

Вывод

Ведутся споры, какой вариант является лучшим, какой наиболее элегантным и какой является наиболее «питоничным». Мне нравится простота метода os.walk(), а также модули fnmatch и pathlib.

Две версии с процессами/конвейером и итератором требуют более глубокого понимания процессов UNIX и знаний Python, поэтому они не могут быть предпочтительными для всех программистов из-за их дополнительной (и избыточной) сложности.

Чтобы найти ответ на этот вопрос, выберем самой быстрой из них, воспользовавшись удобным модулем timeit. Данный модуль подсчитывает время, прошедшее между двумя событиями.

Для сравнения всех решений без их изменений, воспользуемся функциональностью Python: вызовем интерпретатор с модулем timeit и соответствующим Python скриптом. Для автоматизации процесса напишем shell скрипт

#! /bin/bash for filename in *.py; do echo "$filename:" cat $filename | python3 -m timeit echo " " done 

Тесты проводились с использованием Python 3.6. Среди всех тестов os.walk() показала себя наилучшим образом. Выполнение тестов с помощью Python 2 возвращает разные значения, но os.walk() по-прежнему находится на вершине списка.

Источник

Список файлов Python в каталоге и подкаталогах

В Python есть модуль ОС, предоставляющий функции для работы с файлами. Мы можем перечислить файлы в каталоге и подкаталоге программно в Python, используя модуль ОС. В этой статье мы обсудим различные методы создания списка всех файлов в дереве каталогов и подкаталогах..

Как распечатать список файлов Python

Давайте напечатаем все файлы, перечисленные в нашем текущем рабочем каталоге. Во-первых, вам нужно импортировать модуль os в свой файл, а затем использовать функцию os.listdir().

Напишите следующий код в файле app.py.

Список файлов в каталоге и подкаталогах с os.listdir()

Нам нужно рекурсивно вызвать функцию os.listdir() для подкаталогов, чтобы создать полный список файлов в заданном дереве каталогов.

В приведенном выше коде мы определили функцию с именем getFiles(), которая принимает один аргумент с именем dirname. Затем мы создаем список и добавляем полный путь к файлам.

Итак, он начнет перебирать один за другим файл и добавит его полный путь в список, и, в конце концов, мы получим наш полный список файлов.

Получение списка файлов в каталоге и подкаталогах с помощью os.walk()

Модуль python os предоставляет функцию walk() для перебора дерева каталогов.

Функция os.walk() перебирает дерево каталогов при указании пути и для каждого каталога или подкаталога возвращает кортеж, содержащий(, , ).

Перечисление всех файлов txt в указанном каталоге с Glob в Python

В приведенном выше примере мы использовали понимание списка, чтобы получить список всех файлов с расширением .txt.

Итак, в этом примере мы выводим только текстовые файлы, а не все файлы.

Список всех каталогов в указанном каталоге + подкаталоги(**)

Заключение

Список файлов Python в каталоге и подкаталогах

Чтобы вывести каталоги, подкаталоги и файлы, Python имеет отличную встроенную поддержку, которая делает всю работу за вас. Управление файлами и работа с ними — повседневная работа любого программиста.

В этой статье мы увидели, как перечислить все каталоги, подкаталоги и файлы, используя методы Python os.walk(), blob.blob() и Python os.listdir(). Наконец, Python перечисляет все файлы в каталоге, и пример с подкаталогами заканчивается.

Автор статей и разработчик, делюсь знаниями.

Источник

Оцените статью