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()}")
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ