1. 程式人生 > 實用技巧 >Python開發中相對路徑指定輸出位置。

Python開發中相對路徑指定輸出位置。

在Python開發中,有時候需要輸出一些日誌,或者爬蟲的時候需要將一些檔案儲存在指定的位置。

當然你輸入絕對路徑是肯定沒有問題的,但更多的時候,輸入的應該是相對路徑,這樣在專案啟動的時候,可以根據你專案的儲存儲存到指定的目錄.

最近在工作中學到了兩種寫法,感覺都還行,供大家學習參考:

import os, sys
# 通過sys.argv[0]獲取帶相對位置的檔名引數
print(sys.argv[0])
print(os.path.abspath(sys.argv[0]))
mod_path = os.path.dirname(os.path.abspath(sys.argv[0]))
full_path = os.path.join(mod_path, './hello', 'file_name')
print(full_path)

(base) shijianzhongdeMacBook-Pro:/ shijianzhong$ python3 Users/shijianzhong/t.py 
Users/shijianzhong/t.py
/Users/shijianzhong/t.py
/Users/shijianzhong/./hello/file_name
(base) shijianzhongdeMacBook-Pro:/ shijianzhong$ cd Users/
(base) shijianzhongdeMacBook-Pro:Users shijianzhong$ python3 shijianzhong/t.py 
shijianzhong/t.py
/Users/shijianzhong/t.py
/Users/shijianzhong/./hello/file_name

通過在不同的路徑下執行命令,從輸出看,雖然sys.argv[0]的輸出,因為執行的命令不一樣,一直在改動。

但最後的os.path.abspath輸出的路徑還是不變的,通過這個特性,就可以根據啟動檔案的位置為座標點,相對路徑參考此座標點進行檔案的存放。

第二種是通過__file__的屬性來實現:

通過實踐

import os, sys

print(__file__)
print(sys.argv[0])
print(os.path.abspath(sys.argv[0]))
mod_path = os.path.dirname(os.path.abspath(sys.argv[0]))
full_path = os.path.join(mod_path, './hello', 'file_name')
print(full_path)                    

__file__的輸出效果與sys.argv[0]是相同的,由於sys還需要倒包操作,實際操作還是__file__更加方便.