2017-08-03 65 views
0

這裏是目錄地圖:如何從使用python調用子目錄的其他目錄導入文件?

home 
|--main.py 
|files 
    |-----data 
      |-----data.py 
      |-----day 
        |-----001.csv 
    |-----main 
      |-----main.py 

的data.py已經函數將調用在一天子目錄中的一些文件,如001.csv

所以,我在我的main.py希望讓此函數在data.py

首先我使用。

import os, sys 
lib_path = os.path.abspath('../data') 
sys.path.append(lib_path) 

from data import get_rt_data 

現在我可以使用我已經導入的get_rt_data。

,但它仍然有錯誤:

OSError: File 'day/001.csv' does not exist 

我知道,因爲我的main.py不知道哪裏是001.csv

,但我不知道如何解決它。

回答

1

I know because my main.py don't where is 001.csv

你是對的。所以你需要做的是告訴main.py它在哪裏。有幾種方法可以做到這一點。最簡單和最好的方法是將絕對路徑傳遞給試圖讀取day/001.csv的代碼。您可以使用os.path.join(lib_path, "day/001.csv")來代替「day/001.csv」做任何您現在正在做的事情。然後你已經給出了文件的絕對路徑,你的程序會知道在哪裏找到它。

這是濫用「lib_path」的語義,因爲你使用它來讀取數據,但這似乎是你的目錄設置方式的本質。只需將lib_path重命名爲data_path就可以解決語義問題。

還有很多其他的方法可以做到這一點。想到的一個想法是使用os.chdir(lib_path)來更改您的過程的當前工作目錄。然後,您可以像打算那樣打開day/001.csv。不過,我建議不要這樣做,因爲改變你的工作目錄會改變任何其他的相對路徑,並且從你描述的一點點,你不想改變可執行文件的工作地點;你只是想給它一個csv文件的完整路徑。 001.csv的絕對路徑是要走的路。

+0

os.chdir(lib_path)!!! 非常感謝您的解答和解釋。 –

相關問題