ouvrir le fichier en mode "w": IOError: [Errno 2] aucun fichier ou répertoire de ce type
Lorsque j'essaie d'ouvrir un fichier dans écrire 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, non? Alors, comment cette erreur peut-elle se produire?
6 réponses
Vous verrez cette erreur si le répertoire contenant 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 soyez confus sur exactement ce que ce répertoire est. Essayez de mettre une impression 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' starting', 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.chemin.join {[5] } pour combiner des éléments d'un chemin.
Par 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.
Vérifiez que le script dispose d'autorisations d'écriture sur ce répertoire. Essayez ceci:
chmod a+w dir/dir2/dir3
Notez que cela donnera des autorisations d'écriture à tout le monde sur ce répertoire.
Un problème similaire s'est produit dans l'environnement windows. La Solution était d'ajouter "C:" au chemin absolu. Mon but était d'enregistrer des 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")))
Ensuite, j'essayais d'ouvrir ce répertoire pour enregistrer tels que
file_ref = open(file_path, "w")
J'ai ajouté ceci pour exécuter
file_ref = open(("C:\\"+file_path), "w")
Cette erreur se produira également si vous essayez d'écraser un lien logiciel cassé vers un fichier portant le même nom. Dans ce cas, supprimez le lien logiciel cassé et vous pourrez écrire le nouveau fichier.