2014-02-21 276 views
1

如何將我的python文件「myproject.py」的當前路徑設置爲文件本身? 我不希望這樣的事情:如何在Python中自動設置當前工作目錄

path = "the path of myproject.py" 

Mathematica中我可以設置:

SetDirectory[NotebookDirectory[]] 

與Mathematica中的代碼的好處是,如果我改變我的數學文件的路徑,例如如果我把它交給其他人或我把它放在另一個文件夾中,我不需要做任何額外的事情。每次Mathematica自動將目錄設置爲當前文件夾。

我想在Python中有類似的東西。

+0

你究竟在做什麼,爲什麼?是否需要導入myproject.py或從命令行運行? – msvalkon

+0

'os.chdir('/ path')'或'os.getcwd()'? – Torxed

+0

在myproject.py我必須導入一些txt文件並繪製它們。 os.getcwd()給出了python使用的目錄。我想將python文件所在的目錄設置爲工作目錄。 – MOON

回答

3

正確的解決方案是不是要改變當前工作目錄,但要獲取包含腳本或模塊的目錄的完整路徑,請使用os.path.join來構建文件路徑:

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

# then: 
myfile_path = os.path.join(ROOT_PATH, "myfile.txt") 

這比當前工作目錄搞亂安全(提示:如果另一個模塊,你做了之後改變當前的工作目錄,但您可以訪問您的文件之前,會發生什麼?)

+1

@yashar:注意:如果使用'execfile('/ path/to/myproject.py')執行Python文件''__file__'會失敗。 ['基於檢測的解決方案](http://stackoverflow.com/a/21935564/4279)繼續工作。 – jfs

+0

@ J.F.Sebastian:感謝您指出這一點 - 我很少使用'execfile',所以從未遇到過這個問題。 –

1

使用從內置的os模塊os.getcwd()功能也有os.getcwdu()返回當前工作目錄的一個Unicode對象

用法示例:

import os 
path = os.getcwd() 
print path 
#C:\Users\KDawG\Desktop\Python 
+1

問題問如何*設置*沒有得到。 –

+0

@JanneKarila我對你說的話很困惑,但這顯然是OP的需求,請閱讀文檔 –

+0

在myproject.py中,我必須導入一些txt文件並繪製它們。 os.getcwd()給出了python使用的目錄。我想將python文件所在的目錄設置爲工作目錄。 - yashar – MOON

1

我想設置的目錄其中蟒蛇文件,如工作目錄

有兩個步驟:

  1. 找出路徑Python文件
  2. 設置它的父目錄作爲工作目錄

的第二個很簡單:

import os 
os.chdir(module_dir) # set working directory 

如果你想支持運行的腳本一般情況下(Python文件的第一個可能是複雜直接導入到另一個模塊的python文件,符號鏈接的python文件等)。這裏有一個possible solution

import inspect 
import os 

module_path = inspect.getfile(inspect.currentframe()) 
module_dir = os.path.realpath(os.path.dirname(module_path)) 
相關問題