with напрямую для работы с директорией, как с файлом, нельзя.  with работает с объектами, реализующими методы __enter__ и __exit__ (context managers).  Директории не реализуют эти методы.
  os или pathlib.  Чтобы добиться похожего поведения, можно создать свой context manager, который будет выполнять нужные действия при входе (например, сменить текущую директорию) и при выходе (например, вернуть предыдущую директорию).
  
  import os
  class ChangeDirectory:
      def __init__(self, new_path):
          self.new_path = new_path
          self.original_path = None
      def __enter__(self):
          self.original_path = os.getcwd()
          os.chdir(self.new_path)
          return self
      def __exit__(self, exc_type, exc_val, exc_tb):
          os.chdir(self.original_path)
  with ChangeDirectory("/path/to/your/directory"):
      # Код, работающий в указанной директории
      print(os.getcwd())
  # После выхода из блока with, возвращаемся в исходную директорию
  В Python оператор with предназначен для управления ресурсами, гарантируя их корректное освобождение после использования. Он наиболее часто используется с файлами, но его можно адаптировать для работы с директориями, хоть и не напрямую, как с файлами.
Не существует встроенного способа использовать with непосредственно для управления директорией в смысле автоматического её удаления или создания в начале и удаления в конце блока with.
Однако, можно реализовать собственный контекстный менеджер, который будет обрабатывать создание и удаление директории при входе и выходе из блока with.
Вот пример:
import os
import shutil
class DirectoryContextManager:
    def __init__(self, path):
        self.path = path
    def __enter__(self):
        os.makedirs(self.path, exist_ok=True)  # Создаем директорию, если её нет
        return self.path  # Возвращаем путь к директории
    def __exit__(self, exc_type, exc_val, exc_tb):
        if os.path.exists(self.path):
            try:
                shutil.rmtree(self.path) # Удаляем директорию и все её содержимое
            except OSError as e:
                print(f"Ошибка при удалении директории: {e}")
                return False # Позволяем исключению всплыть выше, если удаление не удалось
        return False # Если исключение не обрабатывается, позволяем ему всплыть выше
  Использование:
with DirectoryContextManager("temp_directory") as dir_path:
    # Внутри этого блока директория "temp_directory" существует.
    # dir_path содержит путь к этой директории.
    print(f"Директория создана и используется: {dir_path}")
    
    # Здесь можно производить операции с файлами внутри этой директории
    with open(os.path.join(dir_path, "example.txt"), "w") as f:
        f.write("Hello, world!")
# После выхода из блока "with", директория "temp_directory" будет удалена.
  Пояснения:
DirectoryContextManager реализует протокол контекстного менеджера, определённый методами __enter__ и __exit__.__enter__ вызывается при входе в блок with.  В данном случае он создает директорию, используя os.makedirs(self.path, exist_ok=True), и возвращает путь к директории, который будет присвоен переменной, указанной после as в операторе with.  exist_ok=True предотвращает ошибку, если директория уже существует.__exit__ вызывается при выходе из блока with, независимо от того, возникло ли исключение.  В данном случае он удаляет директорию и всё её содержимое, используя shutil.rmtree(self.path).  Важно обрабатывать возможные ошибки при удалении, например, отсутствие прав доступа.  Возвращаемое значение метода __exit__ указывает, было ли исключение обработано. False означает, что исключение должно быть повторно вызвано (если оно произошло).Альтернативные подходы:
Если требуется лишь временная директория, можно рассмотреть использование модуля `tempfile`:
import tempfile
with tempfile.TemporaryDirectory() as temp_dir:
    # temp_dir - это путь к временной директории, которая будет автоматически удалена
    print(f"Временная директория: {temp_dir}")
    # Работа с временной директорией...
    Этот вариант проще в использовании, так как не требует создания собственного класса контекстного менеджера, но он создает именно временную директорию, предназначенную для недолгой работы.
Выбор подхода зависит от конкретных требований задачи: если нужна более гибкая настройка и управление жизненным циклом директории, то стоит реализовать свой контекстный менеджер. Если же достаточно временной директории, то tempfile.TemporaryDirectory – более простой вариант.