2013-03-18 19 views
1

我有一個Python腳本,從被認爲是在腳本的同一目錄中的文件讀取一些輸入:如何指示腳本的當前目錄不是我?

with open('./input1.txt') as file: 
    F = file.readlines() 
Do_Stuff(F) 

我通常運行從其他目錄中的腳本(而不是目錄的腳本和輸入文件駐留),因此引發IOError,它無法找到輸入文件(因爲它不在我當前的工作目錄中)。我不喜歡爲輸入文件設置完整路徑,因爲我希望它是可移植的 - 只有腳本和輸入文件必須位於相同的目錄中。

有沒有一種方法可以指示腳本在其位置目錄中查找,而不是我從其啓動它的目錄?

+1

獲取正在運行並用於打開文件的python文件的絕對路徑! – theAlse 2013-03-18 10:35:59

+0

使用文件input1.txt的完整路徑,將從您啓動此腳本的任何位置開始工作。如果ful-path是用戶可配置的,則將其放在單獨的配置文件中,然後讀取它。由於您嘗試打​​開('./input1.txt')操作系統將始終看當前目錄 – RedBaron 2013-03-18 11:41:59

+0

相關:[如何獲取當前執行文件在Python中的路徑?](http://stackoverflow.com/questions/2632199/how-do-i-get-the-path-of-the-current-executed-file-in-python) – jfs 2013-03-18 12:47:48

回答

3

__file__是腳本的路徑,儘管通常是相對路徑。用途:

import os.path 

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

創建一個絕對路徑的目錄,然後使用os.path.join()打開文件:

with open(os.path.join(scriptdir, './input1.txt')) as openfile: 
+0

它仍然返回我所在的路徑,而不是腳本的位置。 – amyassin 2013-03-18 11:26:33

+0

@amyassin:你如何運行腳本? 'python path/to/script.py'會將'__file__'設置爲'path/to/script.py'(例如相對路徑)。上面的代碼*將*變成'/ full/path/to',一個絕對路徑。當您運行腳本時,從各種不同的命令行(本地目錄,另一個目錄等)打印'__file__',以查看有哪些更改。我以前使用過很多次,它不會*只使用當前的工作目錄。 – 2013-03-18 11:43:30

+0

根據http://docs.python.org/2/library/os.path.html#os.path.abspath,它等同於'normpath(join(os.getcwd(),path))',它使用當前的工作目錄... – amyassin 2013-03-18 11:47:35

0

如果setuptools的/分發安裝;您可以使用pkg_resources functions來訪問文件:

import pkg_resources 

data = pkg_resources.resource_string(__name__, 'input1.txt') 
相關問題