python操作檔案目錄
前面的文章我們有講過 python 對檔案的讀寫操作,但同時檔案一定是存在於某個目錄下的,所以我們還需要知道 python 對目錄的一些常見操作。
關於對目錄的操作,都可以使用 os 這個內建的庫來實現。
1、獲取目錄
os.getcwd() 獲取當前程式的工作目錄,注意並不是指當前程式所在的目錄,這裡一不小心就會掉坑裡去,一會我會詳細說明。
os.path.dirname(os.path.realpath(__file__)) 這個才是正確的獲取當前檔案所在的目錄,其中 os.path.dirname 是指去掉檔名稱,返回目錄路徑。
現在有兩個目錄:
E:\pyinstaller\pyinstaller-develop\py (dir.py 所在目錄)
E:\pyinstaller\pyinstaller-develop\py\dir_2 (getpath.py 所在目錄)
# -*- coding:utf-8 -*- #這是getpath.py檔案 import os import shutil def getCurPath1(): cur_path = os.path.dirname(os.path.realpath(__file__)) return cur_path def getCurPath2(): cur_path = os.getcwd() return cur_path print('第一種獲取方式:'+getCurPath1()) print('第二種獲取方式:'+getCurPath2())
# -*- coding:utf-8 -*-
#這是dir.py檔案
import os
from dir_2 import getPath
path1 = getPath.getCurPath1()
path2 = getPath.getCurPath2()
我們直接執行 getpath.py 結果為:
第一種獲取方式:E:\pyinstaller\pyinstaller-develop\py\dir_2 第二種獲取方式:E:\pyinstaller\pyinstaller-develop\py\dir_2
我們再執行 dir.py 結果又為:
第一種獲取方式:E:\pyinstaller\pyinstaller-develop\py\dir_2
第二種獲取方式:E:\pyinstaller\pyinstaller-develop\py
從上面的程式碼中可以知道,os.getcwd() 僅僅只是獲取當前最外層呼叫指令碼的路徑。如果有其他指令碼呼叫當前指令碼,那返回的就是其他指令碼所在的目錄了,這一點一定要弄明白,還不理解的話,就需要多看幾遍,動手操作幾遍試試。
2、檢查目錄
一般對檔案的讀寫操作之前,需要確認其對應的目錄是否存在,注意檔案的寫操作雖然可以自動建立不存在的檔案,但那是僅僅限於在程式的當前目錄下,對於一個非當前目錄的檔案進行寫操作前還是需要判斷其目錄是否存在的。
os.path.exists() 可以用來判斷目錄或者檔案是否存在,有的時候目錄和檔名可能是相同的,所以我們就再需要使用 os.path.isfile 和 os.path.isdir 來分別判斷是否是檔案和目錄。
# -*- coding:utf-8 -*-
#判斷目錄或者檔案是否存在,引數可以是絕對路徑或相對路徑,返回布林值
print(os.path.exists('../dir_2/getPath.py'))
#判斷是否是目錄,引數可以是絕對路徑或相對路徑,返回布林值
print(os.path.isdir('../dir_2'))
3、建立目錄
如果檢測到目錄不存在,我們就需要建立目錄。
os.mkdir() 一次只能建立一級目錄,也就是說只能一級一級的建立目錄,不能一次建立多級目錄,有一定的侷限性,不建議使用。
os.makedirs() 可以一次性建立多級目錄,剛好可以突破上面提到的侷限性,推薦使用。
要注意的是如果要建立的目錄已經存在了就會報錯,所以在建立目錄前務必先檢測目錄。
# -*- coding:utf-8 -*-
#一次只能建立一級目錄
os.mkdir('./newdir')
#可一次性建立多級目錄
os.makedirs('./newdir/newdir2/newdir3')
4、刪除目錄
os.rmdir() 刪除指定空目錄,如果目錄非空則報錯。
os.removedirs() 刪除指定目錄下所有空目錄,即被刪除的空目錄的父級目錄也是空目錄的話也會被刪除,依次類推,因此會刪除所有的空目錄。
shutil.rmtree 則會強制刪除指定目錄下的所有檔案和目錄,注意是強制刪除,請務必慎用,使用前需要 import shutil 匯入。
# -*- coding:utf-8 -*-
#刪除指定空目錄
os.rmdir('./newdir')
#刪除目錄下所有空目錄
os.removedirs('./newdir/newdir2/newdir3')
#強制刪除目錄下所有檔案和目錄,務必慎用
shutil.rmtree('./')