2009-12-28 4 views
0

Salut. J'ai un projet en Python, dont la mise en page répertoire est le suivant:Accéder à un fichier relativement en Python si vous ne connaissez pas votre point de départ?

root 
    |-bin 
    |-conf 
    |-[project] 

fichiers Python dans [projet] besoin d'être en mesure de lire les données de configuration à partir du répertoire « conf », mais je ne peux pas garantir l'emplacement de racine, plus il peut être utilisé sur les machines Linux, Mac et Windows, donc j'essaie de traiter relativement le répertoire conf à partir du répertoire racine.

À la minute où il travaille avec un sale hack (de la racine/bin, nom de fichier python particulier est de 8 caractères longs):

path = os.path.abspath(__file__)[:-8] 
os.chdir(path) 
os.chdir("..") 
[projectclass].config('config/scans.json') #for example 

Mais cela est particulièrement horrible et me donne des cauchemars. Y a-t-il une meilleure façon d'accomplir ce que j'essaie de réaliser qui ne me semble pas si sale? J'ai l'impression qu'il me manque quelque chose de très évident. Merci d'avance.

Répondre

2

Au lieu de:

path = os.path.abspath(__file__)[:-8] 

utilisation:

path = os.path.dirname(os.path.abspath(__file__)) 

Voir les docs here.

+0

Merde, je ne peux pas croire que j'ai raté ça. Mon excuse est qu'il est tard ici! Toujours sentir sale cependant! – Loix0

+0

@ Loix0, pouvez-vous articuler ce qui vous semble "sale" à ce sujet? '__file__' vous dit" où vous êtes ", c'est de là que vous naviguez. Peut-être utiliser 'os.path.join' au lieu de' os.chdir', si c'est seulement un fichier ou deux que vous avez besoin de lire dans le répertoire 'conf' ...? –

+0

Ce n'est pas sale du tout. Il utilise * __ file __ * comme il est destiné à être utilisé. –

Questions connexes