web-dev-qa-db-fra.com

Essayer d'utiliser open (nom de fichier, 'w') donne IOError: [Errno 2] Aucun fichier ou répertoire de ce type si le répertoire n'existe pas

J'essaie de créer et d'écrire dans un fichier texte en utilisant Python. J'ai cherché et je ne trouve pas de solution/raison à cette erreur.

Voici le code qui ne fonctionne pas:

afile = 'D:\\temp\\test.txt'
outFile = open(afile, 'w' )
outFile.write('Test.')
outFile.close()

# Error: 2
# Traceback (most recent call last):
#   File "<maya console>", line 1, in <module>
# IOError: [Errno 2] No such file or directory: 'D:\\temp\\test.txt' #

La plupart des réponses que j'ai trouvées concernaient les barres obliques du chemin, alors ...

I tried 'D:/temp/test.txt' and got an error.
I tried r'D:\temp\test.txt' and got an error.

Lorsque j'essaie de créer un fichier à la racine de D:/j'ai du succès.

'D:/test.txt' works.
'D:\\test.txt' works.
r'D:\test.txt' works.

Il semble que je ne puisse pas créer le chemin du répertoire que j'aimerais en essayant de créer le fichier. Quelle est la bonne méthode pour créer des fichiers à un chemin spécifique avec Python sous Windows (7)? Suis-je en train de mal comprendre ce que open () peut faire? Est-ce qu'il crée des répertoires s'ils n'existent pas ou dois-je créer explicitement le chemin du répertoire avant d'utiliser open () en mode "écriture" pour créer un fichier?

21
gonzalimator

Vous avez raison de supposer que le répertoire parent du fichier doit exister pour que open réussisse. La manière la plus simple de résoudre ce problème consiste à appeler os.makedirs .

De la documentation :

os.makedirs (chemin [ mode])

Fonction de création de répertoire récursif. Comme mkdir(), mais crée tous les répertoires de niveau intermédiaire nécessaires pour contenir le répertoire leaf.

Ainsi, votre code pourrait exécuter quelque chose comme ceci:

filename = ...
dirname = os.path.dirname(filename)
if not os.path.exists(dirname):
    os.makedirs(dirname)
with open(filename, 'w'):
    ...
39
David Heffernan

Si vous essayez de créer un fichier dans un répertoire qui n'existe pas, vous obtiendrez cette erreur.

Vous devez d'abord vous assurer que le répertoire existe. Vous pouvez le faire avec os.makedirs() selon cette réponse .

2
paxdiablo

Alternativement, vous pouvez vérifier si le fichier existe avant de l'ouvrir avec:

os.path.exists (afile)

Qui dira soit Vrai soit Faux, selon qu'il existe.

1
aMoon