2012-11-10 4 views
0

Je suis nouveau à python et le morceau de code suivant me rend fou. Il répertorie les fichiers dans un répertoire et pour chaque fichier fait des choses. Je reçois un IOError: [Errno2] No such file or directory: my_file_that_is_actually_there!étrange un tel fichier ou répertoire en python

def loadFile(aFile): 
    f_gz = gzip.open(aFile, 'rb') 
    data = f_gz.read() 
    #do some stuff... 
    f_gz.close() 
    return data 

def main(): 
    inputFolder = '../myFolder/' 
    for aFile in os.listdir(inputFolder): 
    data = loadFile(aFile) 
    #do some more stuff 

Le fichier existe et il est pas corrompu. Je ne comprends pas comment il est possible que python trouve d'abord le fichier quand il vérifie le contenu de myFolder, et alors il ne peut pas le trouver plus ... Cela se produit sur la deuxième itération de ma boucle for seulement avec tous les fichiers.

REMARQUE: Pourquoi cette exception se produit-elle SEULEMENT lors de la deuxième itération de la boucle? Le premier fichier dans le dossier est trouvé et ouvert sans aucun problème ...

+0

double possible de [IOError en essayant d'ouvrir les fichiers existants] (http://stackoverflow.com/questions/10802418/ioerror-when-trying-to-open-existing-files) –

+0

Martijn, s'il vous plaît vérifier ma modification (j'ai ajouté une note). Ce détail n'est pas abordé dans la question liée à votre commentaire. – Gevorg

+2

Cela ne peut se produire que si le répertoire local possède le même nom * exact * que celui trouvé dans '../ myFolder /'. Vous ouvrez le mauvais fichier. Donc s'il y a un '../ myFolder/foo' il y a * aussi * un'./Foo'. –

Répondre

2

C'est parce que open reçoit le nom local (retour de os.listdir). Il ne sait pas que vous voulez dire qu'il devrait regarder ../myFolder. Il reçoit donc un chemin relatif et l'applique au répertoire courant. Pour résoudre ce problème, essayez:

data = loadFile(os.path.join(inputFolder, aFile)) 
+0

Puisque 'inputFolder' est un chemin relatif, il est à noter que cela dépend aussi de l'endroit où le script est exécuté. Cette solution ne fonctionnera pas si elle est exécutée à partir du "mauvais" répertoire. – Maehler

+0

Lorsqu'il est exécuté à partir d'un "mauvais" répertoire, le script échouera probablement à l'étape 'os.listdir' :) –

+0

merci, cela fonctionne! Mais POURQUOI ce problème ne se pose-t-il qu'à la deuxième itération de la boucle? Y at-il quelque chose que je dois savoir spécifiquement sur python? – Gevorg

Questions connexes