- Получение списка файлов в каталоге и подкаталогах в Python
- Пример 1
- Пример 2: с определенным расширением
- Примеры использования модуля os в Python
- os.name
- os.environ, os.getenv() и os.putenv()
- os.chdir() и os.getcwd()
- os.mkdir() и os.makedirs()
- os.remove() и os.rmdir()
- os.rename(src, dst)
- os.startfile()
- Перебирать файлы в каталоге в Python
- 1. Использование os.listdir() функция
- 2. Использование os.scandir() функция
- 3. Использование pathlib модуль
- 4. Использование os.walk() функция
Получение списка файлов в каталоге и подкаталогах в 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
В этом руководстве мы узнали получения списка всех файлов в каталоге и его подкаталогах.
Примеры использования модуля os в Python
Данный модуль можно применять во многих случаях. В данном разделе мы не рассмотрим каждый из них. Вместо этого, мы рассмотрим, как именно его можно применять, а также ознакомимся с подмодулем, под названием os.path. В частности, мы расскажем о:
- os.name
- os.environ
- os.chdir()
- os.getcwd()
- os.getenv()
- os.putenv()
- os.mkdir()
- os.makedirs()
- os.remove()
- os.rename()
- os.rmdir()
- os.startfile()
- os.walk()
- os.path
Это может выглядеть как большой объем материала, но есть еще минимум десяток других задач, которые модуль os может выполнять. Так что данный раздел можно назвать кратким экскурсом. Для использования любого из методов, упомянутых в данном разделе, вам нужно импортировать модуль os, вот так:
os.name
Модуль os обладает как вызываемыми функциями, так и обычными значениями. В случае с os.name, речь идет только о значениях. При доступе к os.name, вы получите информацию о том, с какой платформой вы работаете. Вам откроются следующие значения: ‘posix’, ‘nt’, ‘os2’, ‘ce’, ‘java’, ‘riscos’. Давайте посмотрим на то, что выйдет, если запустить его на Windows 7:
Это говорит нам о том, что наш экземпляр Пайтон работает в окне Windows. Как мы об этом узнали? Майкрософт начали называть свою операционную систему NT много лет назад. Например, Windows 7 также носит имя Windows NT 6.1.
os.environ, os.getenv() и os.putenv()
Значение os.environ известно как объект мэппинга (сопоставления), который работает со словарем переменных пользовательской среды. Возможно вы не знали, но каждый раз, когда вы пользуетесь своим компьютером, некоторые переменные среды уже установлены.
Это дает вам полезную информацию, такую как количество процессоров, тип ОЗУ, имя компьютера, и так далее. Посмотрим, что мы сможем узнать о нашем компьютере:
Ваши данные будут отличаться от моих, так как конфигурация компьютера у всех немного отличается, однако вы определенно увидите большое количество совпадений. Как вы могли заметить, это вернуло словарь. Это значит, что вы можете получить доступ к значениям среды, пользуясь обычными словарными методами. Например:
Вы также можете использовать функцию os.getenv для доступа к этой переменной:
Полезность использования os.getenv() вместо словаря os.environ заключается в том, что если вы находитесь в положении, когда вам нужно получить доступ к переменной среды, которая не существует, функция getenv попросту ничего не сделает. Если вы попытаетесь сделать то же самое, пользуясь os.environ, вы получите уведомление об ошибке. Давайте попробуем на примере:
Результат выполнения данного скрипта:
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
os.chdir() и os.getcwd()
Функция os.chdir позволяет нам вносить изменения в каталоге, который мы в данный момент используем в сессии. Если вам нужно знать, какой путь вы в данный момент используете, для этой нужно вызвать os.getcwd(). Попробуем воспользоваться обоими модулями:
Указанный код демонстрирует нам, что мы открыли директорию по умолчанию в Пайтоне, после запуска данного кода в IDLE. После этого мы изменили папки, при помощи os.chdir(). Наконец, мы вызывали os.getcwd() еще раз, чтобы убедиться, что все изменения были выполнены правильно.
os.mkdir() и os.makedirs()
Как вы могли догадаться, эти два метода используются для создания папок. Первая, os.mkdir(), позволяет создать одну папку. Попробуем:
Первая строка кода создает папку под названием test в определенном каталоге. Вы можете использовать эти модули в предыдущем разделе, чтобы узнать, где именно вы запустили свой код, на случай, если вы забыли. Во втором примере мы назначили путь к переменной, затем к os.mkdir(). Это позволяет вам создать папку в любой точке вашей системы, где есть доступ. Функция os.makedirs() создает промежуточные папки в пути, если их там нет. В целом, это значит, что вы создали путь, в котором размещены папки. Лично я часто прибегал к данному решению, когда была необходимость создания журнала, с датированной структурой, например Год\Месяц\День. Давайте взглянем на пример:
Что произошло? Этот код просто создал кучу папок! Если в вашей системе все еще есть папка pytest, то в ней появится папка 2014, в которой также есть папка, в которой, удивительно, находится еще одна. Попробуйте сами, воспользовавшись рабочим путем в вашей системе.
os.remove() и os.rmdir()
Функции os.remove() и os.rmdir() используются для удаления файлов и каталогов соответственно. Посмотрим на os.remove():
Этот фрагмент кода пытается удалить файл под названием test.txt из вашего рабочего каталога. Если модуль не может найти файл, должно появиться уведомление о той или иной ошибке. Ошибка также возникнет, если файл уже используется (другими словами закрыт), или у вас нет разрешения для удаления данного файла. Возможно, вы хотите проверить os.unlink, который выполняет ту же функцию. Термин unlink – привычное для Unix название данной процедуры. Взглянем на пример работы os.rmdir():
Данный код попытается удалить каталог под названием pytest из каталога, используемого в данный момент в работе. В случае, если это удалось, каталог pytest исчезнет. Ошибка может возникнуть, если каталога с таким названием не существует, если у вас нет разрешения на его удаление, или если каталог не пустой. Вам возможно хочется взглянуть на os.removedirs(), который может удалить пустые вложенные каталоги.
os.rename(src, dst)
Функция os.rename() применяется тогда, когда нужно переименовать файл или папку. Посмотрим на примере:
В этом примере, мы указали os.rename на то, что нужно переименовать файл под названием test.txt на pytest.txt. Это произойдет в каталоге, с которым мы в данный момент работаем. Ошибка может возникнуть в том случае, если вы попытаетесь переименовать несуществующий файл, или если у вас нет доступа к данной операции. Также существует функция os.renames, которая меняет название папки или файла соответственно.
os.startfile()
Метод os.startfile() позволяет нам «запустить» файл в привязанной к нему программе. Другими словами, мы можем открыть файл вместе с привязанной к нему программой, как когда вы открываете файл PDF двойным щелчком, и он открывается в программе Adobe Reader. Попробуем:
Перебирать файлы в каталоге в 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) функция, которая размещает заданный относительный шаблон в указанном каталоге и дает соответствующие файлы.
В следующем примере показано, как фильтровать и отображать текстовые файлы, находящиеся в каталоге.
В качестве альтернативы вы можете использовать Path.iterdir() функция, которая возвращает объекты пути содержимого каталога. Чтобы получить расширение файла, используйте suffix имущество:
4. Использование os.walk() функция
Если вам нужно также искать подкаталоги, рассмотрите возможность использования os.walk() функция. Это дает 3-кортеж (dirpath, dirnames, filenames) для всего, что доступно из указанного каталога, где dirpath это путь к каталогу, dirnames это список имен подкаталогов в dirpath, и filenames представляет собой список имен файлов, не входящих в каталоги, в каталоге dirpath.