J'appelle os.mkdir pour créer un dossier avec un certain ensemble de données générées. Cependant, même si le chemin que je spécifie n'a pas été créé, os.mkdir (chemin) lève une erreur OSE indiquant que le chemin existe déjà.
Par exemple, j'appelle:
os.mkdir(test)
Cet appel aboutit à OSError: [Errno 17] File exists: 'test'
même si je n'ai ni répertoire de test ni fichier nommé test.
REMARQUE: le nom de chemin réel que j'utilise n'est pas "test", mais quelque chose de plus obscur que je suis sûr de ne pas nommer nulle part.
Aidez-moi, s'il vous plaît?
La réponse de Greg est correcte mais ne va pas assez loin. OSError
a des conditions de sous-erreur et vous ne voulez pas toutes les supprimer. Il est prudent de ne capturer que les erreurs attendues du système d'exploitation.
Effectuez une vérification supplémentaire avant de décider de supprimer l'exception, comme ceci:
import errno
import os
try:
os.mkdir(dirname)
except OSError as exc:
if exc.errno != errno.EEXIST:
raise
pass
Vous ne voulez probablement pas supprimer errno.EACCES
(autorisation refusée), errno.ENOSPC
(il ne reste plus d’espace sur le périphérique), errno.EROFS
décision consciente basée sur la logique spécifique de ce que vous construisez.
Le code de Greg supprime toutes les erreurs du système d'exploitation. c'est dangereux, tout comme except Exception
est dangereux.
Il suffit de vérifier si le chemin existe. sinon le créer
if not os.path.exists(test):
os.makedirs(test)
J'ai également rencontré le même problème, spécialement lorsque la chaîne 'test' contient plusieurs noms de répertoire . Ainsi, lorsque 'test' contient un seul répertoire -
if not os.path.exists(test):
try:
os.makedir(test)
except:
raise OSError("Can't create destination directory (%s)!" % (test))
Si le 'test' contient plusieurs répertoires comme '\ dir1\dir2', alors -
if not os.path.exists(test):
try:
os.makedirs(test)
except:
raise OSError("Can't create destination directory (%s)!" % (test))
Vous avez là un fichier avec le nom test
. Vous ne pouvez pas créer un répertoire avec exactement le même nom.
Cela m'est arrivé sous Windows, c'est peut-être le cas:
Comme toi j'essayais de:
os.mkdir(dirname)
et j'ai eu OSError: [Errno 17] File exists: '<dirname>'
. Quand j'ai couru:
os.path.exists(dirname)
Je me suis trompé et ça m'a rendu fou pendant un moment :)
Le problème était: Dans une certaine fenêtre, j'étais dans le répertoire spécifique. Même s'il n'existait pas à ce moment-là (je l'ai supprimé de Linux). La solution était de fermer cette fenêtre\naviguez vers un autre endroit . Honteux, je sais ...
Je ne connais pas les détails de votre système de fichiers. Mais si vous voulez vraiment contourner cela, utilisez peut-être une clause try/except?
try:
os.mkdir(test)
except OSError:
print "test already exists"
Vous pouvez toujours faire une sorte de débogage en attendant.
Peut-être y a-t-il un test de nom de dossier caché dans le répertoire.Vérifier manuellement s'il existe.
ls -a
Créer seulement s'il n'existe pas
if not os.path.exists(test):
os.makedirs(test)