Python如何獲取文件路徑/目錄
一、獲取文件路徑實(shí)現(xiàn)
1.1 獲取當(dāng)前文件路徑
import os current_file_path = __file__ print(f"current_file_path: {current_file_path}")
__file__變量其實(shí)有個(gè)問(wèn)題,當(dāng)文件被是被調(diào)用文件時(shí)__file__總是文件的絕對(duì)路徑;但當(dāng)文件是直接被執(zhí)行的文件時(shí),__file__并不總是文件的絕對(duì)路徑,而是你執(zhí)行該文件時(shí)給python傳的路徑。比如你是python xxx/yyy.py形式執(zhí)行的,那么此時(shí)__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 獲取調(diào)用文件的文件路徑
有時(shí)候我們想要獲取調(diào)用當(dāng)前文件的父文件的文件路徑,此時(shí)可以通過(guò)以下代碼實(shí)現(xiàn):
import inspect def be_call_fun(): # stack()返回的是調(diào)用棧列表。 frame_stack = inspect.stack() # 0是標(biāo)識(shí)當(dāng)前函數(shù)的棧,1是標(biāo)識(shí)上一層函數(shù)的棧,依此類推。 # 也就是這個(gè)數(shù)值不一定是1,要看你要獲取其文件路徑的函數(shù)在第幾層 caller_frame = frame_stack[1] caller_file_path = caller_frame.filename # 由于當(dāng)前調(diào)用函數(shù)和被調(diào)用函數(shù)放在同一個(gè)文件,所以文件名還是當(dāng)前文件名 # 可將調(diào)用函數(shù)和被調(diào)用函數(shù)放到不同文件進(jìn)行觀察 print(f"caller_file_path: {caller_file_path}") def caller_fun(): be_call_fun() if __name__ == "__main__": caller_fun()
二、獲取目錄
2.1 獲取當(dāng)前工作目錄
所謂當(dāng)前工作目錄,就是你執(zhí)行python命令執(zhí)行python文件時(shí),shell所在的文件夾。
import os current_working_dir = os.getcwd() print(f"current_working_dir: {current_working_dir}")
2.2 借助路徑獲取目錄
第一大節(jié)我們已經(jīng)借紹了幾種獲取文件路徑的方式,要獲取對(duì)應(yīng)的文件所處的文件夾,可直接借助這些路徑+os.path.dirname()實(shí)現(xiàn)。
import os # 文件絕對(duì)路徑 current_file_path = __file__ # 借助dirname()從絕對(duì)路徑中提取目錄 current_file_dir = os.path.dirname(current_file_path) print(f"current_file_dir: {current_file_dir}") # 類似地可以借助basename()從絕對(duì)路徑中提取文件名 # current_filename = os.path.basename(current_file_path) # 另外建議使用os.path.join()來(lái)實(shí)現(xiàn)路徑拼接,這樣不用自己再關(guān)注路徑分隔符的問(wèn)題 # 再有是os.path.join()參數(shù)并不一定要就是目錄+文件名形式,不管多少個(gè)參數(shù)都可以拼接 # current_file_path = os.path.join(current_file_dir, current_filename)
三、文件和目錄的其他一些操作
3.1 文件的常用操作
r--讀模式打開(kāi)文件,如果文件不存在則報(bào)錯(cuò)。
r+--讀寫(xiě)模式打開(kāi)文件,如果文件不存在則報(bào)錯(cuò)。寫(xiě)時(shí)原有內(nèi)容不會(huì)被清空,而是被替換式覆蓋。
w--寫(xiě)模式打開(kāi)文件,如果文件不存在則創(chuàng)建。已有內(nèi)容會(huì)被清空。
w+--讀寫(xiě)模式打開(kāi)文件,如果文件不存在則創(chuàng)建。已有內(nèi)容會(huì)被清空。
a--追加模式打開(kāi)文件,如果文件不存在則創(chuàng)建。
a+--讀追加模式打開(kāi)文件,如果文件不存在則創(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: # 讀取所有內(nèi)容 fd.read() # 讀取一行 fd.readline() # 讀取所有行,返回為各行組成的形表 fd.readlines() # 遍歷文件各行簡(jiǎn)潔寫(xiě)法 for line in open(file_name, 'r', encoding='utf-8'): print(line) # 寫(xiě)文件 with open(file_name, 'w') as fd: # 向文件寫(xiě)入內(nèi)容,需要自行添加\n fd.write("test_str") # 向文件寫(xiě)入內(nèi)容,需要自行添加\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,在父目錄不存在時(shí)會(huì)創(chuàng)建失敗 os.mkdir(dir_name) # 創(chuàng)建目錄。此種形式是的于shell的mkdir -p,在父目錄不存在時(shí)會(huì)自動(dòng)創(chuàng)建父文件夾 os.makedirs(dir_name, exist_ok=True) # 刪除目錄。此種形式相當(dāng)于shell的rmdir,在目錄非空時(shí)刪除失敗 os.rmdir(dir_name) # 刪除目錄。此種形式相當(dāng)于shell的rm -rf import shutil shutil.rmtree(dir_name) # 重命名目錄。 os.rename(dir_name, new_dir_name) # 遍歷目錄 # dir_path是當(dāng)前遍歷到的目錄。dir_names是dir_path下的文件夾列表。file_names是是dir_path下的文件列表 # 如果想實(shí)現(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如何獲取文件路徑/目錄的詳細(xì)內(nèi)容,更多關(guān)于Python獲取文件路徑/目錄的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
VScode連接遠(yuǎn)程服務(wù)器上的jupyter notebook的實(shí)現(xiàn)
這篇文章主要介紹了VScode連接遠(yuǎn)程服務(wù)器上的jupyter notebook的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Python實(shí)現(xiàn)微信消息防撤回功能的實(shí)例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)微信消息防撤回 ,需要的朋友可以參考下2019-04-04打包FlaskAdmin程序時(shí)關(guān)于static路徑問(wèn)題的解決
近期寫(xiě)了個(gè)基于Flask-admin的數(shù)據(jù)庫(kù)管理程序,通過(guò)pyinstaller打包,給別人用,經(jīng)過(guò)幾次嘗試,打包的數(shù)據(jù)一直找不到static里面的樣式文件,查閱資料后,最總把問(wèn)題搞定了。寫(xiě)下處理流程,供后來(lái)人參考2021-09-09如何將json數(shù)據(jù)轉(zhuǎn)換為python數(shù)據(jù)
這篇文章主要介紹了如何將json數(shù)據(jù)轉(zhuǎn)換為python數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Pandas實(shí)現(xiàn)聚合運(yùn)算agg()的示例代碼
在數(shù)據(jù)分析中,分組聚合二者缺一不可。對(duì)數(shù)據(jù)聚合(求和、平均值等)通常是不可避免的。pd.agg()很方便進(jìn)行聚合操作。本文就來(lái)介紹一下,感興趣的可以了解一下2021-07-07python3爬蟲(chóng)怎樣構(gòu)建請(qǐng)求header
在本篇內(nèi)容里小編給大家分享了關(guān)于python3爬蟲(chóng)怎樣構(gòu)建請(qǐng)求header的知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。2018-12-12pandas數(shù)據(jù)篩選和csv操作的實(shí)現(xiàn)方法
這篇文章主要介紹了pandas數(shù)據(jù)篩選和csv操作的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07使用Python實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)自動(dòng)巡檢程序
這篇文章主要為大家詳細(xì)介紹了如何創(chuàng)建一個(gè)Oracle數(shù)據(jù)庫(kù)自動(dòng)巡檢程序,以確保數(shù)據(jù)庫(kù)的順暢運(yùn)行,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01