makedirs para criar diretórios hierárquicos profundos recursivamente em Python

O negócio

Erro ao criar um novo directório com os.mkdir() num directório inexistente

os.mkdir()Este é o método utilizado para criar um directório (pasta) em Python. Se se tentar criar um novo directório num directório inexistente, ocorrerá um erro.(FileNotFoundError)

import os

os.mkdir('not_exist_dir/new_dir')
# FileNotFoundError

Criar directórios recursivamente com os.madeirs()

Se utilizar os.makedirs() em vez de os.mkdir(), criará um directório intermédio, para que possa criar recursivamente um directório hierárquico profundo.

os.makedirs('not_exist_dir/new_dir')

No caso deste exemplo, irá criar todos de uma só vez. Não há problema se houver múltiplos novos directórios intermediários.

  • directório intermédio: not_exist_dir
  • directório final: new_dir

No entanto, se o directório final já existir, ocorrerá um erro.(FileExistsError)

os.makedirs('exist_dir/exist_dir')
# FileExistsError

Se existe um argumento_ok

Desde Python 3.2, o argumento exist_ok foi adicionado, e se exist_ok=True, nenhum erro ocorrerá mesmo que o directório final já exista. Se o directório final não existir, será criado um novo, e se ele existir, nada será feito. Isto é conveniente porque não é necessário verificar previamente a existência do directório de terminais.

os.makedirs('exist_dir/exist_dir', exist_ok=True)

Se o argumento existir_ok está em falta

Se tiver uma versão mais antiga de Python e não tiver o argumento existe_ok em os.madeirs, pode usar os.path.exists para determinar se existe ou não um directório final, e depois criar um novo apenas se não existir um directório final.

if not os.path.exists('exist_dir/exist_dir'):
    os.makedirs('exist_dir/exist_dir')