先讓我們來看看乙個用到相對檔案路徑的函式呼叫的問題。假設現在有兩個指令碼檔案main.py
和func.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中相對檔案路徑的問題,但是大部分都沒有提及到在這種情況下的解決辦法。
在以下的三個函式中,第乙個和第二個是大部分教程中的解決辦法,但是這樣是錯誤的,因為第乙個和第二個函式所獲取的"當前檔案路徑"都是被執行的指令碼檔案的所在路徑,只有第三個函式返回的當前檔案路徑才是真正的、該函式所在的指令碼檔案的所在路徑
defget_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...