Python中的相對檔案路徑的呼叫

2021-09-07 17:19:11 字數 1761 閱讀 7258

先讓我們來看看乙個用到相對檔案路徑的函式呼叫的問題。假設現在有兩個指令碼檔案main.pyfunc.py,他們的路徑關係是:

.

|--dir1

|--main.py

|--dir2

|--func.py

|--test.txt

func.py的作用是提供load_txt()函式,讀取同級目錄下test.txt檔案中的內容並返回。

#

func.py

defload_txt()

filename = '

./test.txt

'return open(filenamem, '

r').read()

假設現在在main.py中呼叫load_txt()函式:

#

main.py

from dir2 import

func if

__name__ == '

__main__':

print func.load_txt()

這個時候會報類似找不到檔案test.txt的錯誤。

為什麼會這樣呢?這是因為在函式呼叫的過程中,當前路徑.代表的是被執行的指令碼檔案的所在路徑。在這個情況中,.表示的就是main.py的所在路徑,所以load_txt()函式會在dir1資料夾中尋找test.txt檔案。

那麼怎麼樣才能在函式呼叫的過程中保持相對路徑的不變呢?

在網上有相當多的教程都有提到這個python中相對檔案路徑的問題,但是大部分都沒有提及到在這種情況下的解決辦法。

在以下的三個函式中,第乙個和第二個是大部分教程中的解決辦法,但是這樣是錯誤的,因為第乙個和第二個函式所獲取的"當前檔案路徑"都是被執行的指令碼檔案的所在路徑,只有第三個函式返回的當前檔案路徑才是真正的、該函式所在的指令碼檔案的所在路徑

def

get_cur_path1():

import

os

return

os.path.abspath(os.curdir)

defget_cur_path2():

import

sys

return

sys.ar**[0]

defget_cur_path3():

import

os

return os.path.dirname(__file__)

因此,解決辦法如下。修改func.py中的讀取函式如下即可:

#

func.py

import

osdef

load_txt()

module_path = os.path.dirname(__file__

)

filename = modelu_path + '

/test.txt

'return open(filenamem, '

r').read()

1 5 絕對檔案路徑 和 相對檔案路徑

1 絕對檔案路徑 可以使用絕對路徑引用目錄名稱。絕對檔案路徑定義目錄在虛擬檔案結構中的確切位置,它以根目錄 開頭,類似於目錄的完整名稱。如果要引用包含在usr目錄中的lib目錄的rpm目錄,可以使用絕對檔案路徑 root hadoop lib cd usr lib rpm使用絕對路徑,可以準確了解目...

python對檔案的 python對檔案的讀寫

檔案 file 什麼是檔案 檔案是用於資料儲存和單位 檔案通常用來長期儲存資料 檔案中的資料是以位元組為單位進行順序儲存的 檔案的操作流程 1.開啟檔案 2.讀 寫檔案 3.關閉檔案 注 任何的作業系統,乙個應用程式同時開啟檔案的數量有最大數限制 檔案的開啟函式 open file,mode rt ...

Python對檔案和檔案路徑的管理

1.使用os.path進行路徑和檔案管理 1.1 拆分路徑 1.2 構建路徑 1.3 獲取檔案屬性 1.4 判斷檔案型別 應用案例 1.獲取指定目錄下所有檔案列表 2.獲取指定目錄下所有檔案和大小的字典 2.利用os模組管理檔案和目錄 2.1 檢視檔案或者目錄 2.2 對檔案和目錄的增刪查改 2.3...