Python如何獲取文件路徑/目錄
一、獲取文件路徑實現(xiàn)
1.1 獲取當前文件路徑
import os
current_file_path = __file__
print(f"current_file_path: {current_file_path}")
__file__變量其實有個問題,當文件被是被調用文件時__file__總是文件的絕對路徑;但當文件是直接被執(zhí)行的文件時,__file__并不總是文件的絕對路徑,而是你執(zhí)行該文件時給python傳的路徑。比如你是python xxx/yyy.py形式執(zhí)行的,那么此時__file__的值就是xxx/yyy.py。
可以使用以下更統(tǒng)一的方式獲取文件路徑:
import inspect
current_file_name = inspect.getfile(inspect.currentframe())
print(f"current_file_name: {current_file_name}")
1.2 獲取調用文件的文件路徑
有時候我們想要獲取調用當前文件的父文件的文件路徑,此時可以通過以下代碼實現(xiàn):
import inspect
def be_call_fun():
# stack()返回的是調用棧列表。
frame_stack = inspect.stack()
# 0是標識當前函數(shù)的棧,1是標識上一層函數(shù)的棧,依此類推。
# 也就是這個數(shù)值不一定是1,要看你要獲取其文件路徑的函數(shù)在第幾層
caller_frame = frame_stack[1]
caller_file_path = caller_frame.filename
# 由于當前調用函數(shù)和被調用函數(shù)放在同一個文件,所以文件名還是當前文件名
# 可將調用函數(shù)和被調用函數(shù)放到不同文件進行觀察
print(f"caller_file_path: {caller_file_path}")
def caller_fun():
be_call_fun()
if __name__ == "__main__":
caller_fun()
二、獲取目錄
2.1 獲取當前工作目錄
所謂當前工作目錄,就是你執(zhí)行python命令執(zhí)行python文件時,shell所在的文件夾。
import os
current_working_dir = os.getcwd()
print(f"current_working_dir: {current_working_dir}")
2.2 借助路徑獲取目錄
第一大節(jié)我們已經(jīng)借紹了幾種獲取文件路徑的方式,要獲取對應的文件所處的文件夾,可直接借助這些路徑+os.path.dirname()實現(xiàn)。
import os
# 文件絕對路徑
current_file_path = __file__
# 借助dirname()從絕對路徑中提取目錄
current_file_dir = os.path.dirname(current_file_path)
print(f"current_file_dir: {current_file_dir}")
# 類似地可以借助basename()從絕對路徑中提取文件名
# current_filename = os.path.basename(current_file_path)
# 另外建議使用os.path.join()來實現(xiàn)路徑拼接,這樣不用自己再關注路徑分隔符的問題
# 再有是os.path.join()參數(shù)并不一定要就是目錄+文件名形式,不管多少個參數(shù)都可以拼接
# current_file_path = os.path.join(current_file_dir, current_filename)
三、文件和目錄的其他一些操作
3.1 文件的常用操作
r--讀模式打開文件,如果文件不存在則報錯。
r+--讀寫模式打開文件,如果文件不存在則報錯。寫時原有內容不會被清空,而是被替換式覆蓋。
w--寫模式打開文件,如果文件不存在則創(chuàng)建。已有內容會被清空。
w+--讀寫模式打開文件,如果文件不存在則創(chuàng)建。已有內容會被清空。
a--追加模式打開文件,如果文件不存在則創(chuàng)建。
a+--讀追加模式打開文件,如果文件不存在則創(chuàng)建。
import os
file_name = "test.txt"
new_file_name = "new_test.txt"
# 創(chuàng)建空白文件
open(file_name, 'w').close()
# 刪除文件
os.remove(file_name)
# 重命名文件
os.rename(file_name, new_file_name)
# 讀文件
with open(file_name, 'r') as fd:
# 讀取所有內容
fd.read()
# 讀取一行
fd.readline()
# 讀取所有行,返回為各行組成的形表
fd.readlines()
# 遍歷文件各行簡潔寫法
for line in open(file_name, 'r', encoding='utf-8'):
print(line)
# 寫文件
with open(file_name, 'w') as fd:
# 向文件寫入內容,需要自行添加\n
fd.write("test_str")
# 向文件寫入內容,需要自行添加\n
# 和write的區(qū)別是,其參數(shù)除了可以是字符串,還可以是字符串列表
fd.writelines(["test_str", "test_str"])
3.2 目錄的常用操作
import os
dir_name = "test_dir/dir_name"
new_dir_name = "test_dir/new_dir_name"
# 創(chuàng)建目錄。此種形式是的于shell的mkdir,在父目錄不存在時會創(chuàng)建失敗
os.mkdir(dir_name)
# 創(chuàng)建目錄。此種形式是的于shell的mkdir -p,在父目錄不存在時會自動創(chuàng)建父文件夾
os.makedirs(dir_name, exist_ok=True)
# 刪除目錄。此種形式相當于shell的rmdir,在目錄非空時刪除失敗
os.rmdir(dir_name)
# 刪除目錄。此種形式相當于shell的rm -rf
import shutil
shutil.rmtree(dir_name)
# 重命名目錄。
os.rename(dir_name, new_dir_name)
# 遍歷目錄
# dir_path是當前遍歷到的目錄。dir_names是dir_path下的文件夾列表。file_names是是dir_path下的文件列表
# 如果想實現(xiàn)目錄白名單,將白名單目錄從dir_names中去除即可
for (dir_path, dir_names, file_names) in os.walk(dir_name):
for file_name in file_names:
print(os.path.join(dir_path, file_name))
以上就是Python如何獲取文件路徑/目錄的詳細內容,更多關于Python獲取文件路徑/目錄的資料請關注腳本之家其它相關文章!
相關文章
Python?OpenCV超詳細講解透視變換的實現(xiàn)
OpenCV用C++語言編寫,它具有C?++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac?OS,OpenCV主要傾向于實時視覺應用,并在可用時利用MMX和SSE指令,本篇文章帶你通過OpenCV實現(xiàn)透視變換2022-04-04
Pytorch對Himmelblau函數(shù)的優(yōu)化詳解
今天小編就為大家分享一篇Pytorch對Himmelblau函數(shù)的優(yōu)化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
Python利用pptx操作PPT實現(xiàn)幻燈片的刪除與替換
這篇文章主要為大家詳細介紹了python如何使用pptx庫實現(xiàn)操作PPTx幻燈片文件刪除并替換圖片,文中的示例代碼講解詳細,感興趣的可以嘗試一下2023-02-02
Python利用flask sqlalchemy實現(xiàn)分頁效果
這篇文章主要為大家詳細介紹了利用flask sqlalchemy實現(xiàn)分頁效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07

