2009-02-04 10 views
8

Wie ändere ich das Verzeichnis in das Verzeichnis mit meinem Python-Skript? Bisher habe ich herausgefunden, dass ich os.chdir und sys.argv[0] verwenden sollte. Ich bin mir sicher, dass es einen besseren Weg gibt, meine eigene Funktion zu schreiben, um argv [0] zu parsen.Wechseln Sie in das Verzeichnis eines Python-Skripts

+0

Sie können dies direkt kopieren und einfügen: 'import os; os.chdir (os.path.dirname (__ file __)) ' – Basj

Antwort

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

aus welchem ​​Grund auch immer __file__ war C: \ dev \ Python25 \ Lib \ idleLib, also hat ein schneller Ersatz durch argv [0] es gelöst. +1 und markieren Sie markiert –

+1

Je nach Plattform möchten Sie möglicherweise "os.path.abspath" auf das Ergebnis von "os.path.dirname" verwenden, um sicherzustellen, dass alle symbolischen Links oder andere Dateisystemumleitung ordnungsgemäß erweitert werden. –

5

Manchmal __file__ nicht definiert ist, in diesem Fall, dass Sie sys.path[0]

+1

@Miki - wann ist '__file__' nicht definiert? –

+3

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

+1

@JanusTroelsen: gilt auch für Python 2.7. – George

4

os.chdir(os.path.dirname(os.path.abspath(__file__))) sollte es tun versuchen.

os.chdir(os.path.dirname(__file__)) würde nicht funktionieren, wenn das Skript aus dem Verzeichnis ausgeführt wird, in dem es vorhanden ist.

+0

Es funktioniert auch, um 'os.chdir (os.path.dirname (__ file__) oder '.')' Zu schreiben. Das In-Directory-Problem tritt auf, wenn '__file__' nicht das Präfix' ./ 'hat. 'os.path.dirname' gibt in diesem Fall eine leere Zeichenfolge zurück. – George

+0

Schöne Beobachtung @George :) – iamas

0

auf Windows-Betriebssystem, wenn Sie so etwas wie Python somefile.py diese os.chdir (os.path.dirname (__ FILE__)) nennen eine WindowsError werfen. Aber das sollte für alle Fälle funktionieren:

import os 
absFilePath = os.path.abspath(__file__) 
os.chdir(os.path.dirname(absFilePath)) 
Verwandte Themen