2015-03-19 31 views
0

我有一些代碼可以使用熊貓來恢復python中的一些小型excel文件,並對它們執行一些數據分析。我正在嘗試設置我的代碼的測試,但是我遇到了一些麻煩,並且在四處搜索時找不到合適的答案。如何在python中指定根模塊目錄?

這裏是我的代碼的目錄結構:

my_project/ 
    __init__.py 
    code/ 
     __init__.py 
     analysiscode.py 
    tests/ 
     __init__.py 
     testcode.py 
    data/ 
     datafile.xlsx 

我最初是從code目錄中運行analysiscode.py,所以我被指定,像這樣的路徑恢復數據文件:

import pandas as pd 
df = pd.read_excel('../data/datafile.xlsx') 

但是,現在,當我嘗試在模塊根目錄(即my_project)的代碼上運行測試時,在查看數據目錄之前指定的上一個目錄的路徑不再有效。

以下是錯誤消息的示例:

my_project$ nosetests 
IOError: [Errno 2] No such file or directory: '../data/datafile.xlsx' 

對於這種特殊情況下,我總是可以指定完整的路徑,但我正在尋找一個更通用的解決方案,使別人可以下載這個代碼,並仍然有效。

有沒有在python中指定my_project目錄的方法?換句話說,有沒有說沿着

mydatadir = my_project/data 
df = pd.read_excel(mydatadir+'datafile.xlsx') 

這樣我可以運行分析代碼的東西線的方式無論是從my_project/code目錄或my_project目錄,而不需要知道的完整路徑my_project

+1

嘗試導入os模塊,然後使用'os.chdir(「..」)'切換到最後一個目錄,然後運行命令爲'df = pd.read_excel('data/datafile.xlsx')' – 2015-03-19 03:13:37

+0

謝謝對於這個建議。不幸的是,用'os.chdir(「..」my_project'目錄運行代碼。「)',並且在調用'read_excel'時從文件名中刪除的點搜索'my_project /../data/datafile.xlsx',也就是說,它搜索一個從'my_project'上一級的數據目錄, – mgig 2015-03-19 03:38:52

+0

您使用的是什麼操作系統? – 2015-03-19 03:41:51

回答

0

只要您在my_project或其任何子目錄中,這應該讓您進入基本目錄(my_project)。在此代碼之後,您可以運行諸如
df = pd.read_excel('data/datafile.xlsx')之類的命令。

import os 
my_dir = "my_project" #Root Directory 
while os.getcwd().find(my_dir) >= 0: 
    os.getcwd("..") #Go back until you are out of the my_dir 
os.chdir(my_dir) #Go back into my_dir 
1

我想通了使用__file__模塊根路徑導入my_project後:

In [1]: import my_project 
In [2]: print(my_project.__file__) 
Out[2]: /Users/me/projects/my_project.__init__.py 

並通過一個小的字符串操作擺脫.__init__.py才能到模塊根目錄:

In [3]: my_project_dir = '/'.join(str(my_project.__file__).split('/')[:-1]) 
In [4]: print(my_project_dir) 
Out[4]: '/Users/me/projects/my_project/' 

將此應用於我上面的代碼示例中,無論當前工作如何,都可以恢復數據目錄是這樣的:

import my_project 
import pandas as pd 
my_project_dir = '/'.join(str(my_project.__file__).split('/')[:-1]) 
df = pd.read_excel(my_project_dir+'data/datafile.xlsx') 

我測試過這一點,我現在可以成功地從code目錄內從my_project目錄中運行analysiscode.py,以及和運行nosetestsmy_project目錄作爲工作好。

相關問題