Você também pode criar o diretório se ele não estiver lá.
Fonte , se ainda estiver lá no SO.
==================================================== ===================
No Python ≥ 3.5, use pathlib.Path.mkdir
:
from pathlib import Path
Path("/my/directory").mkdir(parents=True, exist_ok=True)
Para versões mais antigas do Python, vejo duas respostas com boas qualidades, cada uma com uma pequena falha, por isso vou dar a minha opinião:
Tente os.path.exists
e considere os.makedirs
a criação.
import os
if not os.path.exists(directory):
os.makedirs(directory)
Conforme observado nos comentários e em outros lugares, há uma condição de corrida - se o diretório for criado entre os.path.exists
as os.makedirs
chamadas e as chamadas, a os.makedirs
falha será com um OSError
. Infelizmente, a captura OSError
e a continuação de mantas não são infalíveis, pois ignoram a falha na criação do diretório devido a outros fatores, como permissões insuficientes, disco cheio, etc.
Uma opção seria interceptar OSError
e examinar o código de erro incorporado (consulte Existe uma maneira de obter várias plataformas de obter informações do OSError do Python ):
import os, errno
try:
os.makedirs(directory)
except OSError as e:
if e.errno != errno.EEXIST:
raise
Como alternativa, pode haver um segundo os.path.exists
, mas suponha que outro criou o diretório após a primeira verificação e o removeu antes da segunda - ainda poderíamos ser enganados.
Dependendo do aplicativo, o perigo de operações simultâneas pode ser mais ou menos do que o perigo causado por outros fatores, como permissões de arquivo. O desenvolvedor precisaria saber mais sobre o aplicativo específico que está sendo desenvolvido e seu ambiente esperado antes de escolher uma implementação.
As versões modernas do Python aprimoram bastante esse código, expondo FileExistsError
(no 3.3 +) ...
try:
os.makedirs("path/to/directory")
except FileExistsError:
# directory already exists
pass
... e permitindo que um argumento de palavra-chave seja os.makedirs
chamadoexist_ok
(em 3.2+).
os.makedirs("path/to/directory", exist_ok=True) # succeeds even if directory exists.
os.stat
, para ver se o diretório existe e é um diretório no mesmo momento.