簡體   English   中英

如何在python中指定根模塊目錄?

[英]How do I specify the root module directory in python?

我有代碼可以使用pandas在python中還原一些小的excel文件,並對它們執行一些數據分析。 我現在正在嘗試對我的代碼進行測試,但是遇到了一些麻煩,到處搜索時找不到合適的答案。

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

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的完整路徑?

導入my_project后,我使用__file__找出了模塊的根路徑:

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')

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

只要您位於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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM