Python教程:文件路径/目录获取教程
生活随笔
收集整理的這篇文章主要介紹了
Python教程:文件路径/目录获取教程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、獲取文件路徑實現
1 獲取當前文件路徑
import oscurrent_file_path = __file__ print(f"current_file_path: {current_file_path}")__file__變量其實有個問題,當文件被是被調用文件時__file__總是文件的絕對路徑;但當文件是直接被執行的文件時,__file__并不總是文件的絕對路徑,而是你執行該文件時給python傳的路徑。比如你是python xxx/yyy.py形式執行的,那么此時__file__的值就是xxx/yyy.py。
可以使用以下更統一的方式獲取文件路徑:
import inspectcurrent_file_name = inspect.getfile(inspect.currentframe()) print(f"current_file_name: {current_file_name}")2 獲取調用文件的文件路徑
有時候我們想要獲取調用當前文件的父文件的文件路徑,此時可以通過以下代碼實現:
import inspectdef 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()二、獲取目錄
1 獲取當前工作目錄
所謂當前工作目錄,就是你執行python命令執行python文件時,shell所在的文件夾。
import oscurrent_working_dir = os.getcwd() print(f"current_working_dir: {current_working_dir}")2 借助路徑獲取目錄
第一大節我們已經借紹了幾種獲取文件路徑的方式,要獲取對應的文件所處的文件夾,可直接借助這些路徑+os.path.dirname()實現。
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' 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)三、文件和目錄的其他一些操作
1 文件的常用操作
r--讀模式打開文件,如果文件不存在則報錯。 r+--讀寫模式打開文件,如果文件不存在則報錯。寫時原有內容不會被清空,而是被替換式覆蓋。 w--寫模式打開文件,如果文件不存在則創建。已有內容會被清空。 w+--讀寫模式打開文件,如果文件不存在則創建。已有內容會被清空。 a--追加模式打開文件,如果文件不存在則創建。 a+--讀追加模式打開文件,如果文件不存在則創建。 import osfile_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:# 向文件寫入內容,需要自行添加\nfd.write("test_str")# 向文件寫入內容,需要自行添加\n# 和write的區別是,其參數除了可以是字符串,還可以是字符串列表fd.writelines(["test_str", "test_str"])2 目錄的常用操作
import osdir_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教程:通过函数名调用函数的3
- 下一篇: Python从头/尾删除子符串的正确操作