Python如何獲取檔案路徑/目錄
阿新 • • 發佈:2020-09-23
一、獲取檔案路徑實現
1.1 獲取當前檔案路徑
import os current_file_path = __file__ print(f"current_file_path: {current_file_path}")
__file__變數其實有個問題,當檔案被是被呼叫檔案時__file__總是檔案的絕對路徑;但當檔案是直接被執行的檔案時,__file__並不總是檔案的絕對路徑,而是你執行該檔案時給python傳的路徑。比如你是python xxx/yyy.py形式執行的,那麼此時__file__的值就是xxx/yyy.py。
可以使用以下更統一的方式獲取檔案路徑:
import inspect current_file_name = inspect.getfile(inspect.currentframe()) print(f"current_file_name: {current_file_name}")
1.2 獲取呼叫檔案的檔案路徑
有時候我們想要獲取呼叫當前檔案的父檔案的檔案路徑,此時可以通過以下程式碼實現:
import inspect def be_call_fun(): # stack()返回的是呼叫棧列表。 frame_stack = inspect.stack() # 0是標識當前函式的棧,1是標識上一層函式的棧,依此類推。 # 也就是這個數值不一定是1,要看你要獲取其檔案路徑的函式在第幾層 caller_frame = frame_stack[1] caller_file_path = caller_frame.filename # 由於當前呼叫函式和被呼叫函式放在同一個檔案,所以檔名還是當前檔名 # 可將呼叫函式和被呼叫函式放到不同檔案進行觀察 print(f"caller_file_path: {caller_file_path}") def caller_fun(): be_call_fun() if __name__ == "__main__": caller_fun()
二、獲取目錄
2.1 獲取當前工作目錄
所謂當前工作目錄,就是你執行python命令執行python檔案時,shell所在的資料夾。
import os current_working_dir = os.getcwd() print(f"current_working_dir: {current_working_dir}")
2.2 藉助路徑獲取目錄
第一大節我們已經借紹了幾種獲取檔案路徑的方式,要獲取對應的檔案所處的資料夾,可直接藉助這些路徑+os.path.dirname()實現。
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()來實現路徑拼接,這樣不用自己再關注路徑分隔符的問題 # 再有是os.path.join()引數並不一定要就是目錄+檔名形式,不管多少個引數都可以拼接 # current_file_path = os.path.join(current_file_dir,current_filename)
三、檔案和目錄的其他一些操作
3.1 檔案的常用操作
r--讀模式開啟檔案,如果檔案不存在則報錯。
r+--讀寫模式開啟檔案,如果檔案不存在則報錯。寫時原有內容不會被清空,而是被替換式覆蓋。
w--寫模式開啟檔案,如果檔案不存在則建立。已有內容會被清空。
w+--讀寫模式開啟檔案,如果檔案不存在則建立。已有內容會被清空。
a--追加模式開啟檔案,如果檔案不存在則建立。
a+--讀追加模式開啟檔案,如果檔案不存在則建立。
import os file_name = "test.txt" new_file_name = "new_test.txt" # 建立空白檔案 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的區別是,其引數除了可以是字串,還可以是字串列表 fd.writelines(["test_str","test_str"])
3.2 目錄的常用操作
import os dir_name = "test_dir/dir_name" new_dir_name = "test_dir/new_dir_name" # 建立目錄。此種形式是的於shell的mkdir,在父目錄不存在時會建立失敗 os.mkdir(dir_name) # 建立目錄。此種形式是的於shell的mkdir -p,在父目錄不存在時會自動建立父資料夾 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下的檔案列表 # 如果想實現目錄白名單,將白名單目錄從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獲取檔案路徑/目錄的資料請關注我們其它相關文章!