Создание директории python os

Создание и удаление директорий с помощью Python

Эта статья продолжает нашу серию рассказов о взаимодействии с файловой системой в Python. В предыдущих разговор шёл о чтении и записи файлов. Любопытно, что файловая система — это гораздо больше, чем способ сохранять/извлекать данные на диск или с диска. Также есть разные типы объектов, такие как файлы, директории, сокеты (для межпроцессного взаимодействия), именованные каналы (pipes), как мягкие (символьные), так и жёсткие ссылки, а также специальные файлы устройств. Запись и чтение в них или из них делается примерно так же, как мы видели в предыдущих статьях.

Эта статья посвящена работе с директориями. Другие операционные системы, такие как UNIX/Linux, используют другую терминологию, где “папка” именуется “каталогом”. Далее мы вам покажем, как определить текущую рабочую директорию, как создать постоянную и временную, одиночную и вложенные структуры с подкаталогами, и как удалить директорию, если она больше не нужна. Здесь в игру вступают два модуля Python: os и tempfile .

Требуемые модули Python

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

Читайте также:  Java run app command line

Модуль os содержит большинство методов, которые нам понадобятся на протяжении этой статьи. Хотя, как будет видно позже, если вы хотите чего-то более продвинутого, такого как создать временный файл для хранения данных, то нам также будет нужен модуль tempfile .

Определяем текущую рабочую директорию

Прежде чем мы возьмёмся за создание/удаление директорий, давайте посмотрим, как выполнять простейшие операции с директориями, например определять текущий рабочий каталог, используя метод getcwd() . Этот метод вернёт строку, содержащую путь к вашей рабочей директории. Листинг 1 показывает, как интегрировать этот метод в скрипт на Python.

# импорт модуля os import os # определяем текущий каталог и печатаем path = os.getcwd() print ("Текущая рабочая директория %s" % path)

Вывод должен выглядеть следующим образом:

$ python3 cwd.py Текущая рабочая директория /home/sergey/

Более того, модуль os содержит дополнительный метод getcwdb() . Он похож на метод getcwd() , но в отличие от него нозвращает путь как двоичную строку.

Есть и некоторые другие операции с директориями, не затронутые в этой статье, такие как проверка наличия файла или каталога. Но сейчас перейдём к главной цели этой статьи.

Создание директории

Одиночная директория создаётся методом mkdir() . В качестве параметра mkdir() запрашивает путь к каталогу, чтобы создать его. Для примера рассмотрим код ниже:

import os # определим имя директории, которую создаём path = "/tmp/year" try: os.mkdir(path) except OSError: print ("Создать директорию %s не удалось" % path) else: print ("Успешно создана директория %s " % path)

Имейте в виду, что метод mkdir() не может создавать подкаталоги уровнем глубже первого за один вызов. Чтобы создать путь целиком, вам нужно вызвать mkdir() один раз для каждого уровня. Иначе, если вы хотите создать множество каталогов за один раз, воспользуйтесь вместо этого методом makedirs() (который вы можете увидеть в листинге 4 ниже).

В качестве вспомогательного параметра можно определить права доступа к директории внутри вызова mkdir() . Настройки по умолчанию суть 777, это означает, что читать и писать могут хозяин, члены группы и все остальные пользователи. Если вам нужны более строгие настройки, такие как 755, (доступно для чтения всем пользователям, права на запись есть только у хозяина), вы можете вызвать его так:

import os # определим имя директории, которую создаём path = "/tmp/year" # define the access rights access_rights = 0o755 try: os.mkdir(path, access_rights) except OSError: print ("Создать директорию %s не удалось" % path) else: print ("Успешно создана директория %s" % path)

Вы могли заметить, что права доступа (в данном сдучае 755) определены через восьмеричный префикс ( 0o ), так что вам не придётся переводить число в десятичный формат. Поскольку операционная система представляет права доступа в восьмеричном виде, мы их представим так же.

Хотя, как гласит документация Python, некоторые системы игнорируют параметр mode , вместо него следует использовать os.chmod .

Создание директории с подкаталогами

Как уже было упомянуто выше, метод mkdir() позволяет нам создать только одиночную директорию. Чтобы создать многоуровневые подкаталоги, приходит на помощь метод makedirs() . В самом деле, makedirs() имплементируется так, что он вызывает mkdir() , чтобы создавать директории одну за другой.

В качестве параметра makedirs() принимает путь целиком. Этот метод схож с командой UNIX/Linux mkdir -p . Листинг 4 показывает пример того, как его применять.

import os # определим имя директории, которую создаём path = "/tmp/year/month/week/day" try: os.makedirs(path) except OSError: print ("Создать директорию %s не удалось" % path) else: print ("Успешно создана директория %s" % path)

Созддание временной директории

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

Листинг 5 показывает пример того, как используется метод TemporaryDirectory() в комбинации с выражением with . После with временная директория больше не существует, потому что и каталог, и его содержимое полностью удалены.

import tempfile # создаём временную директорию with tempfile.TemporaryDirectory() as directory: print('Создана временная директория %s' % directory) # каталог и его содержимое удалены

Листинг 6 показывает вывод скрипта на Python из листинга 5. Чтобы создать временные файлы, в системах UNIX/Linux выбираются три директории /tmp, /var/tmp и /usr/tmp, и берётся первый подходящий каталог. В данном случае использутся /tmp.

$ python3 mkdir-temporary.py Создана временная директория /tmp/tmpf6o0hy3c

(в вашем случае, скорее всего, каталог будет называться по-другому – примечание)

Удаление директории

Это операция, противоположная её созданию. Вы можете это сделать, используя метод rmdir() из модуля os . rmdir() запрашивает путь в виде строки, содержащей имя каталога, и удаляет только самый глубокий элемент в строке пути. Заметьте, что это работает лишь тогда, когда директория совершенно пуста. Если же она не пуста, возбуждается исключение OSError . Листинг 7 показывает соответствующий код на Python.

import os # определим имя директории, которую удаляем path = "/tmp/year" try: os.rmdir(path) except OSError: print ("Удалить директорию %s не удалось" % path) else: print ("Успешно удалена директория %s" % path)

В случае, когда вы хотите удалить целое дерево каталогов, метод rmtree() из модуля shutil поможет вам в этом.

Вывод

Как вы уже моли заметить, работа с директориями в Python очень проста. От вас требуется лишь несколько строк кода, чтобы создать или удалить этот тип файловых объектов.

Источник

Модуль Python os — примеры создания и работы с папками и путями

Работа с папками и создание путей с модулем OS в Python

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

Модуль OS не нуждается в дополнительной установке, так как поставляется вместе с инсталлятором Python.

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

Есть несколько способов вернуть список каталогов и файлов по указанному пути. Первый способ используя os.walk, который возвращает генератор:

import os path = 'C:/windows/system32/drivers/' print(path)

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

Такие объекты можно итерировать для понятного отображения структуры:

import os path = 'C:/Folder1' for el in os.walk(path): print(el)

Обработка списка директорий и файлов с библиотекой os в Python

Сам кортеж делится на 3 объекта: текущая директория, имя вложенных папок (если есть), список файлов. Я так же разделил их на примере ниже:

import os path = 'C:/Folder1' for dirs,folder,files in os.walk(path): print('Выбранный каталог: ', dirs) print('Вложенные папки: ', folder) print('Файлы в папке: ', files) print('\n')

Разделение директорий и папок с библиотекой os в Python

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

import os path = 'C:/Folder1' for dirs,folder,files in os.walk(path): print('Выбранный каталог: ', dirs) print('Вложенные папки: ', folder) print('Файлы в папке: ', files) print('\n') # Отобразит только корневую папку и остановит цикл break # Отобразит первый итерируемый объект directory = os.walk(path) print(next(directory))

Вывод первой директории с OS walk в Python

Получение файлов через listdir

Есть еще один метод получения файлов используя listdir. Отличия от предыдущего метода в том, что у нас не будет разделения файлов и папок. Он так же не является рекурсивным:

import os path = 'C:/Folder1' directory = os.listdir(path) print(directory)

Вывод списка файлов и папок с библиотекой os.listdir в Python

Получение полного абсолютного пути к файлам

Для последующего чтения файла нам может понадобится абсолютный путь. Мы можем использовать обычный метод сложения строк или метод os.path.join, который сделает то же самое, но и снизит вероятность ошибки если программа работает на разных ОС:

import os path = 'C:/Folder1' for dirs,folder,files in os.walk(path): print('Выбранный каталог: ', dirs) print('Вложенные папки: ', folder) print('Файлы в папке: ', files) print('Полный путь к файлу: ', os.path.join(dirs, files)) 

Получение абсолютного пути с os.path.join в Python

Исключение каталогов или файлов из списка

У нас может быть список полных путей, например из списка выше, из которого мы хотим исключить папки или файлы. Для этого используется os.path.isfile:

import os path = ['C:/Folder1', 'C:/Folder1/Folder2/file2.txt'] for el in path: if os.path.isfile(el): print('Это файл: ', el) else: print('Это папка: ', el)

Проверка папок и файлов с os.path.os.isfile()

Такой же принцип имеют следующие методы:

Получение расширения файлов

Расширение файла можно получить с помощью os.path.splittext(). Этот метод вернет путь до расширения и само расширение. Этот метод исключает ситуацию, когда точка может стоять в самом пути. Если в качестве пути мы выберем каталог (который не имеет расширения) , результатом будет пустая строка:

import os path = ['C:/Folder1', 'C:/Folder1/Folder2/file2.txt'] for el in path: print(os.path.splitext(el))

Получение расширений файлов с os.path.splittext в Python

os.path.basename(path) — вернет имя файла и расширение.

Создание и удаление директорий

Методы по изменению папок следующие:

import os # Имя новой папки path = 'C:/Folder1/NewFolder' # Ее создание os.mkdir(path) # Переименуем папку os.rename(path, 'C:/Folder1/NewFolder2') # Удалим os.rmdir('C:/Folder1/NewFolder2') 

Создание и удаление директорий в Python с os.mkdir и os.rmdir

Если попытаться создать несколько вложенных папок сразу, используя предыдущий пример, появится ошибка FileNotFoundError. Создание папок включая промежуточные выполняется с os.makedirs():

import os path = 'C:/Folder1/Folder1/Folder1/' os.makedirs(path)

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

Если мы пытаемся создать папку с существующим именем, то получим ошибку FileExistsError. Один из способов этого избежать — использование os.path.exists(), который вернет True в случае существования файла или папки:

import os path = ['C:/Folder1/file1.txt', 'C:/Folder1/NotExistFolder'] for el in path: if os.path.exists(el): print('Такой путь существует: ', el) else: print('Такого пути нет', el)

Проверка существование пути с os.path.exists в Python

Получение и изменение текущей директории

Запуская любую программу или консоль, например CMD, мы это делаем из определенной директории. С этой и соседней директорией мы можем работать без указания полного пути. Для того что бы узнать такую директорию в Python используется метод os.getcwd():

import os current_dir = os.getcwd() print(current_dir)

Получение текущей директории с os.getcwd в Python

В директории ‘D:\’ сохранен мой файл, с которого я запускаю методы. Вы можете изменить такую директорию с os.chdir() . Такой подход удобен, когда файлы, с которыми вы работаете в основном находятся в другом месте и вы сможете избежать написания полного пути:

import os current_dir = os.getcwd() print(current_dir) new_dir = os.chdir('D:/newfolder/') print(os.getcwd())

Изменение директории с Python os.chdir

Так же как и в любых языках, в любых методах описанных выше, вы можете использовать ‘..’ для работы с директорией выше или ‘/’ для работы со внутренней:

import os # Текущая директория print(os.getcwd()) # Переход во внутреннюю old_dir = os.chdir('/newfolder/') print(os.getcwd()) # Переход на уровень выше new_dir = os.chdir('..') print(os.getcwd())

Источник

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