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?
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")
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")
J'ai eu la même erreur, mais dans mon cas, la cause était, sous Windows, un chemin plus long que ~ 250 caractères.
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")
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.
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.