欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python導入父文件夾中模塊并讀取當前文件夾內的資源

 更新時間:2020年11月19日 10:07:30   作者:kingname  
這篇文章主要給大家介紹了關于Python導入父文件夾中模塊并讀取當前文件夾內資源的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在某些特殊情況下,我們的 Python 腳本需要調用父目錄下的其他模塊。例如:

在編寫 GNE 的測試用例時,有一個腳本 generate_new_cases.py放在 tests文件夾中。而 tests 文件夾與 gne 文件夾放在同一個位置。其中 gne 文件夾是一個包。我現(xiàn)在需要從generate_new_cases.py 文件中導入 gne 里面的一個類GeneralNewsExtractor。

為了簡化問題,我單獨寫了一個演示的樣例。它的文件結構與每個文件中的內容如下:

現(xiàn)在,我直接在 scripts 文件夾里面運行run.py會報錯,提示從包的最頂層之外相對導入。

現(xiàn)在,我們改一下代碼,嘗試在scripts 文件夾的父文件夾中運行代碼,發(fā)現(xiàn)還是會報錯:

我們再來改一下代碼,在 scripts 文件夾中,把父文件夾加入到sys.path中:

import sys
sys.path.append('..')

運行效果如下圖所示:

這種寫法,當我們在scripts 文件夾里面運行run.py時,確實已經正常了。但是如果我們在scripts文件夾的父文件夾再運行代碼,又不對了,如下圖所示:

為了檢查這個原因,我們打印一下sys.path:

大家有沒有發(fā)現(xiàn)一個很不和諧的東西:其他路徑都是絕對路徑,就最后我們加了兩個點看起來很違和。那如果我們把這兩個點換成絕對路徑呢?于是嘗試獲取當前正在運行的這個文件的絕對路徑:

import sys
from pathlib import Path
current_folder = Path(__file__).absolute().parent
father_folder = str(current_folder.parent)
sys.path.append(father_folder)

運行效果如下圖所示:

導入模塊已經正常了,但是讀取資源文件又異常了。

這是因為,import導入模塊時,是根據(jù)sys.path中的路徑來尋找的。但是讀取資源文件的時候,相對文件路徑是相對于工作區(qū)來尋找的。

現(xiàn)在我們在~/test_import_father_module執(zhí)行python3 scripts/run.py,那么當前的工作區(qū)就是~/test_import_father_module。而由于資源文件是在scripts文件夾中的,所以就找不到。

所以我們還需要修改一下工作區(qū):

import os
from pathlib import Path
current_folder = Path(__file__).absolute().parent
os.chdir(str(current_folder))

運行效果如下圖所示:

現(xiàn)在無論是讀取資源文件還是導入模塊,都已經正常了。

我們再回到 scripts 文件夾中執(zhí)行看看:

發(fā)現(xiàn)也能正常執(zhí)行。

總結

涉及到模塊導入相關的環(huán)境,可以通過在sys.path添加絕對路徑來解決。涉及到讀取資源文件的相關環(huán)境,可以通過使用os.chdir修改工作區(qū)為另一個絕對路徑來解決。

到此這篇關于Python導入父文件夾中模塊并讀取當前文件夾內資源的文章就介紹到這了,更多相關Python導入父文件夾模塊并讀取資源內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論