2012-06-03 4 views
0

Comment supprimer les problèmes liés au chemin dans python?Problème de chemin absolu et de chemin relatif en python

Par exemple. J'ai un module test.py dans un répertoire Test

**test.py** 
import os 
file_path = os.getcwd() + '/../abc.txt' 

f = open(file_path) 
lines = f.readlines() 
f.close 

print lines 

Maintenant, quand j'exécuter le programme ci-dessus hors du répertoire TEST, il me donne l'erreur: -

Traceback (most recent call last): 
    File "TEST/test.py", line 4, in ? 
    f = open(file_path) 
IOError: [Errno 2] No such file or directory: 'abc.txt' 

comment résoudre ce genre de problème . Fondamentalement, c'est juste un petit exemple que j'ai abandonné.

Je suis confronté à un énorme problème de ce genre. J'utilise des paquets existants, qui doivent être exécutés seulement à partir de ce répertoire là où il existe, comment résoudre ce genre de problèmes, de sorte que je puisse exécuter le programme de n'importe où je veux.

Ou capable de gérer l'exemple ci-dessus soit en cours d'exécution dans le répertoire TEST ou en dehors du répertoire TEST.

Toute aide.

Répondre

2

Je pense que la chose la plus facile est de changer le répertoire courant à celui du fichier script:

import os 
os.chdir(os.path.dirname(__file__)) 

Cela peut causer des problèmes, cependant, si le script fonctionne également avec les fichiers dans le travail d'origine annuaire.

+0

comment utiliser cet utilitaire .. Il me donne une erreur. >>> import os >>> os.path.dirname (__ file__) Traceback (dernier appel en dernier): Fichier "", ligne 1, dans? NameError: le nom '__file__' n'est pas défini – geek

+0

__file__ n'est pas défini .. – geek

+4

Avant cela dégénère en comédie: Le balisage convertit deux caractères de soulignement en police __bold__. Utilisez '__file__'. –

0

Votre code examine le répertoire de travail actuel et s'en sert comme base pour trouver les fichiers dont il a besoin. Ce n'est presque jamais une bonne idée, comme vous le savez maintenant.

La solution mentionnée dans la réponse d'Emil Vikström est une solution quickfix, mais une solution plus correcte serait de ne pas utiliser le répertoire de travail actuel comme point de départ.

Comme mentionné dans l'autre réponse, __file__ n'est pas disponible dans l'interpréteur, mais c'est une excellente solution pour votre code.

Ressaisissez votre deuxième ligne à quelque chose comme ceci:

file_path = os.path.join(os.path.dirname(__file__), "..", "abc.txt") 

Cela prendra le répertoire du fichier en cours est, joignez-vous d'abord avec .. puis avec abc.txt, pour créer le chemin que vous voulez.

Vous devriez corriger l'utilisation similaire de os.getcwd() ailleurs dans votre code de la même manière.

Questions connexes