2009-02-04 18 views
8

Come posso cambiare la directory nella directory con il mio script python? Finora ho capito che dovrei usare os.chdir e sys.argv[0]. Sono sicuro che c'è un modo migliore di scrivere la mia funzione per analizzare argv [0].Cambia directory nella directory di uno script Python

+0

È possibile copiare e incollare direttamente questo: 'import os; os.chdir (os.path.dirname (__ file __)) ' – Basj

risposta

16
os.chdir(os.path.dirname(__file__)) 
+0

per qualsiasi motivo __file__ era C: \ dev \ Python25 \ Lib \ idlelib, quindi una rapida sostituzione con argv [0] l'ha risolto. +1 e controllo contrassegnato –

+1

Inoltre, a seconda della piattaforma, si potrebbe voler utilizzare 'os.path.abspath' sul risultato di' os.path.dirname' per assicurarsi che qualsiasi link simbolico o altro reindirizzamento del filesystem venga espanso correttamente. –

5

volte __file__ non è definito, in questo caso si può provare sys.path[0]

+1

@Miki - quando è '__file__' non definito? –

+3

@RobBednark: 'python3.3 -c" print (__ file __) "' –

+1

@JanusTroelsen: anche vero per Python 2.7. – George

4

os.chdir(os.path.dirname(os.path.abspath(__file__))) dovrebbe farlo.

os.chdir(os.path.dirname(__file__)) non funziona se lo script viene eseguito dalla directory in cui è presente.

+0

Funziona anche per scrivere 'os.chdir (os.path.dirname (__ file__) o '.')'. Il problema nella directory si verifica quando '__file__' non ha il prefisso'./'. 'os.path.dirname' restituisce una stringa vuota in quel caso. – George

+0

Bella osservazione @George :) – iamas

0

sul sistema operativo Windows, se si chiama qualcosa come pitone somefile.py questo os.chdir (os.path.dirname (__ FILE__)) lancerà una WindowsError. Ma questo dovrebbe funzionare per tutti i casi:

import os 
absFilePath = os.path.abspath(__file__) 
os.chdir(os.path.dirname(absFilePath)) 
Problemi correlati