JavaRush /Курсы /Модуль 1: Python Core /Работа с директориями

Работа с директориями

Модуль 1: Python Core
12 уровень , 6 лекция
Открыта

7.1 Основные операции

Работать с файлами вы научились, теперь давайте поработаем с директориями. Иногда это похоже на работу с файлами, иногда нет. У директорий есть своя специфика. Основные функции для работы с директориями предоставляются модулями os и shutil.

Основные операции с директориями:

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

Для создания новой директории используется функция os.mkdir().

Пример:


import os

# Создание новой директории
os.mkdir('new_directory')
print("Директория 'new_directory' создана")

Создание нескольких вложенных директорий

Для создания нескольких вложенных директорий используется функция os.makedirs().

Пример:


import os

# Создание нескольких вложенных директорий
os.makedirs('parent_directory/child_directory')
print("Вложенные директории 'parent_directory/child_directory' созданы")

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

Для удаления пустой директории используется функция os.rmdir(). Для удаления директории с содержимым используется функция shutil.rmtree().

Пример:


import os

# Удаление пустой директории
os.rmdir('new_directory')
print("Директория 'new_directory' удалена")

Пример удаления директории с содержимым:


import shutil

# Удаление директории с содержимым
shutil.rmtree('parent_directory')
print("Директория 'parent_directory' и все её содержимое удалены")

Важно! Никогда не удаляйте директорию со всем содержимым. В одном из 10 случаев в вашу программу закрадётся баг, и вы удалите себе половину файлов на диске. Все через это проходят. Никогда так не делайте.

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

Пример:


import os
import shutil

# Проверка существования директории перед удалением
directory_path = 'parent_directory'
if os.path.exists(directory_path):
    shutil.rmtree(directory_path)
    print(f"Директория '{directory_path}' и все её содержимое удалены")
else:
    print(f"Директория '{directory_path}' не существует, удаление невозможно")

7.2 Копирование директорий

Перемещение и переименование директории

Для перемещения или переименования директории используется функция os.rename().


import os

# Создание директории для примера
os.mkdir('original_directory')

# Переименование директории
os.rename('original_directory', 'renamed_directory')
print("Директория 'original_directory' переименована в 'renamed_directory'") 

Копирование директории

Для копирования директории используется функция shutil.copytree(). Эта функция не только копирует содержимое директории, но и создает новую директорию в указанном пути назначения.


import os
import shutil

# Создание директории для примера
os.mkdir('source_directory')

# Копирование директории
shutil.copytree('source_directory', 'destination_directory')
print("Директория 'source_directory' скопирована в 'destination_directory'")

7.3 Текущая директория

К каждой запущенной программе привязано такое понятие, как «текущая рабочая директория». Обычно это директория, в которой запущена программа и в которой она ищет свои служебные файлы. Например, все файлы, пути которых заданы без имени каталога, будут искаться в текущей директории.

Получение текущей рабочей директории

Для получения текущей рабочей директории используется функция os.getcwd().


import os

# Получение текущей рабочей директории
current_directory = os.getcwd()
print(f"Текущая рабочая директория: {current_directory}")

Изменение текущей рабочей директории

Для изменения текущей рабочей директории используется функция os.chdir().


import os

# Изменение текущей рабочей директории
os.chdir('new_directory')
print(f"Текущая рабочая директория изменена на: {os.getcwd()}")

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

Проверка существования директории

Для проверки существования директории используется функция os.path.exists().


import os

# Проверка существования директории
directory_path = 'new_directory'
if os.path.exists(directory_path):
    print(f"Директория '{directory_path}' существует")
else:
    print(f"Директория '{directory_path}' не существует")

Получение абсолютного пути директории

Для получения абсолютного пути используется функция os.path.abspath().


import os

# Получение абсолютного пути директории
relative_path = 'example_directory'
absolute_path = os.path.abspath(relative_path)
print(f"Абсолютный путь: {absolute_path}")

7.4 Содержимое директории

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

Для получения списка файлов и директорий в указанной директории используется функция os.listdir().


import os

# Получение списка файлов и директорий в текущей директории
contents = os.listdir('.')
print(f"Содержимое текущей директории: {contents}")

Можно работать с файлами и директориями не как со списками путей, а как с более сложными объектами.

Получение информации о содержимом директории с использованием os.scandir()

Функция os.scandir() возвращает итератор, который выдает объекты DirEntry для каждой записи в директории. Эти объекты содержат информацию о файлах и директориях, что делает их использование более эффективным по сравнению с os.listdir(), особенно для больших каталогов.


import os

# Получение информации о содержимом директории
with os.scandir('.') as entries:
    for entry in entries:
        print(f"Имя: {entry.name}, Это директория: {entry.is_dir()}, Это файл: {entry.is_file()}")
2
Задача
Модуль 1: Python Core, 12 уровень, 6 лекция
Недоступна
Создание и удаление директорий
Создание и удаление директорий
2
Задача
Модуль 1: Python Core, 12 уровень, 6 лекция
Недоступна
Получение списка файлов и директорий
Получение списка файлов и директорий
Комментарии (4)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
9 октября 2025

import os

with os.scandir(".") as types:
    for tp in types:
        print(f"Имя {tp.name}: Это директория! " if tp.is_dir() else f"Имя {tp.name}: Это файл!")
Slevin Уровень 64
8 июля 2025
Валидатор первой задачи поломанный. В ответе используется небезопасный метод удаления каталогов
Tatiana Уровень 2
24 июля 2025

# Удаление директории new_directory
if os.path.exists("new_directory"):
    os.rmdir("new_directory")

# Удаление вложенной директории parent_directory/child_directory
directory_path = 'parent_directory'
if os.path.exists(directory_path):
    shutil.rmtree(directory_path)
Дмитрий/MrJonson Уровень 88
15 марта 2025
вариант вывода проверки это файл? f"{['НЕТ','ДА'][element.is_file()]}"