web-dev-qa-db-fra.com

ouvrir le fichier en mode "w": IOError: [Errno 2] Aucun fichier ou répertoire de ce type

Quand j'essaye d'ouvrir un fichier dans write mode avec le code suivant:

packetFile = open("%s/%s/%s/%s.mol2" % ("dir", "dir2", "dir3", "some_file"), "w")

Me donne l'erreur suivante:

IOError: [Errno 2] No such file or directory: 'dir/dir2/dir3/some_file.mol2'

Le mode "w" devrait créer le fichier s'il n'existe pas, n'est-ce pas? Alors, comment cette erreur peut-elle se produire?

36
lugte098

Vous verrez cette erreur si le répertoirecontenant le fichier que vous essayez d'ouvrir n'existe pas, même lorsque vous essayez d'ouvrir le fichier en mode "w".

Puisque vous ouvrez le fichier avec un chemin relatif, il est possible que vous ne compreniez pas exactement en quoi consiste ce répertoire. Essayez de mettre une empreinte rapide pour vérifier:

import os

curpath = os.path.abspath(os.curdir)
packet_file = "%s/%s/%s/%s.mol2" % ("dir", "dir2", "dir3", "some_file")
print "Current path is: %s" % (curpath)
print "Trying to open: %s" % (os.path.join(curpath, packet_file))

packetFile = open(packet_file, "w")
39
Lee

Comme vous n'avez pas de barre oblique "de départ", votre script python recherche ce fichier par rapport au répertoire de travail actuel (et non à la racine du système de fichiers). Notez également que les répertoires menant au fichier doivent exister!

Et: utilisez os.path.join pour combiner les éléments d’un chemin.

exemple: os.path.join("dir", "dir2", "dir3", "myfile.ext")

15
ChristopheD

J'ai eu la même erreur, mais dans mon cas, la cause était, sous Windows, un chemin plus long que ~ 250 caractères.

4
Antonio

Un problème similaire s'est produit dans l'environnement Windows. La solution consistait à ajouter "C:" au chemin absolu . Mon but était de sauvegarder certains fichiers dans le bureau de l'utilisateur

file_path = os.path.join(os.environ["HOMEPATH"], os.path.join("Desktop", 
    "log_file.log_%s_%s" %(
    strftime("%Y_%m_%d", localtime()), "number_1")))

alors j'essayais d'ouvrir ce répertoire pour sauvegarder tel que

file_ref = open(file_path, "w")

J'ai ajouté ceci afin de courir

file_ref = open(("C:\\"+file_path), "w")
0
Mamo_S

Vérifiez que le script dispose des autorisations d'écriture sur ce répertoire. Essaye ça:

chmod a+w dir/dir2/dir3

Notez que cela donnera des permissions en écriture à tout le monde sur ce répertoire.

0
Felix

Cette erreur se produira également si vous essayez d'écraser un lien symbolique rompu dans un fichier portant le même nom. Dans ce cas, supprimez le lien brisé cassé et vous pourrez écrire le nouveau fichier.

0
abruin