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?

33
demandé sur Mark Amery 2010-03-08 16:39:04

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")
35
répondu Lee 2016-01-06 18:49:06

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")

14
répondu ChristopheD 2010-03-08 13:43:35

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

3
répondu Antonio 2017-05-10 15:12:17

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.

0
répondu Felix 2010-03-08 13:43:08

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")
0
répondu Mamo_S 2017-12-18 05:09:58

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.

0
répondu abruin 2018-07-01 20:58:22