前言
Python提供os.path 套件及os套件來進行檔案的操作。
本節將介紹使用 os.path 套件的 isdir() 與 isfile() 函式,分別來檢查指定的路徑是否為資料夾或檔案,以及使用exists()函式來檢查指定的檔案或資料夾是否存在。本節也將介紹使用os套件的mkdir() 函式來建立資料夾,及使用rmdir()函式來刪除資料夾。
isdir()、isfile() 函式
os.path 套件的isdir()與isfile()函式,分別用來檢查指定的資料夾路徑名稱與檔案路徑名稱是否存在,語法如下:
os.path.isdir(資料夾路徑名稱)
os.path.isfile(檔案路徑名稱)- 資料夾路徑名稱與檔案路徑名稱,皆屬字串型別。
- 若指定的路徑名稱存在,則傳回值為
True;若不存在,則傳回值為False。 - 在使用
isdir()或isfile()函式前須使用import指令匯入os.path套件名稱或os套件名稱。
[簡例] (檔名:path01.py)
使用isdir()函式檢查 c:磁碟機是否存在有『c:/data/』資料夾,及使用isfile()函式檢查『c:/Windows/system.ini』檔案是否存在。
[結果]
c:/data/ 資料夾路徑不存在
c:/Windows/system.ini 路徑為檔案程式碼:path01.py
import os pName = 'c:/data/' # 判斷指定的路徑是否存在且**是一個資料夾。如果是印出: c:/data/ 路徑為資料夾,否則印出 c:/data/ 資料夾路徑不存在 if os.path.isdir(pName): print(f'{pName} 路徑為資料夾') else: print(f'{pName} 資料夾路徑不存在') fName = 'c:/Windows/system.ini' # 判斷指定的路徑是否存在且是一個檔案。如果是印出: c:/Windows/system.ini 路徑為檔案,否則印出 c:/Windows/system.ini 檔案路徑不存在 if os.path.isfile(fName): print(f'{fName} 路徑為檔案') else: print(f'{fName} 檔案路徑不存在')
說明
- 若
c:磁碟機已事先建立『c:/data/』資料夾,則結果會如下:
c:/data/路徑為資料夾- 第
1行:用import匯入os套件名稱。(os套件包含了os.path套件)- 第
2行:將'c:/data/'字串指定給pName變數。- 第
4行:檢查'c:/data'資料夾路徑是否存在。若存在傳回True,則執行第5行;若不存在傳回False,則執行第7行。- 第
8,10行:'c:/Windows/system.ini'為Windows系統必備的檔案,該檔案路徑必然是存在的,故會傳回True,執行第11行
exists() 函式
os.path套件的exists()函式是用來指定的檔案或資料夾路徑名稱是否存在,可同時取代isdir()及isfile()函式。語法如下:
os.path.exists(路徑名稱)- 路徑名稱:為檔案或資料夾的路徑名稱,屬字串型別。
- 若指定的檔案或資料夾路徑存在,則傳回值為
True;若不存在,則傳回False。 - 在使用
exists()函式前須用import匯入os.path套件名稱或os套件名稱。
[簡例] 使用exists()函式來檢查 c:磁碟是否存在有『c:/data/』資料夾,也使用exists() 函式來檢查 『c:/Windows/system.ini』檔案是否存在。 (檔名:path02.py)
[結果]
c:/data/ 資料夾路徑不存在
c:/Windows/system.ini 路徑為檔案程式碼:
path02.pyimport os pName = 'c:/data/' if os.path.exists(pName): print(f'{pName} 路徑為資料夾') else: print(f'{pName} 資料夾路徑不存在') fName = 'c:/Windows/system.ini' if os.path.exists(fName): print(f'{fName} 路徑為檔案') else: print(f'{fName} 檔案路徑不存在')
mkdir() 函式
os套件的mkdir()函式是用來建立資料夾(或稱目錄)的路徑名稱,語法如下:
os.mkdir(路徑名稱)在指定的路徑中建立資料夾,若路徑中的上一層目錄不存在,會出現錯誤。
若資料夾已存在,也會出現錯誤訊息,所以常和os.path.exists()函式或os.path.isdir()搭配使用。
[簡例] 在c:磁碟機建立『c:/data/』資料夾。 (檔名:path03.py)
[結果]
c:/data/ 路徑不存在
c:/data 資料夾建立成功程式碼:
path03.pyimport os pName = 'c:/data/' if os.path.exists(pName): print(f'{pName} 路徑已存在,不必再建立') else: print(f'{pName} 路徑不存在') os.mkdir(pName) print(f'{pName} 資料夾建立成功')
rmdir() 函式
os套件的rmdir()函式是用來刪除已存在的空資料夾(或稱目錄),語法如下:
os.rmdir(路徑名稱)-
使用本函式須和
os.path.exists()函式搭配,要先確定要刪除的資料夾是否存在,才能進一步進行刪除動作。 -
若要刪除的資料夾不存在,或是其中有檔案時,而直接使用
rmdir()函式時會
出現錯誤訊息。
[簡例] 在c:磁碟機建立『c:/data/』資料夾。 (檔名:path04.py)
[結果]
c:/data/ 路徑目前存在
c:/data/ 路徑已刪除程式碼:
path04.pyimport os pName = 'c:/data/' if os.path.exists(pName): print(f'{pName} 路徑目前存在') os.rmdir(pName) print(f'{pName} 路徑已刪除') else: print(f'{pName} 路徑不存在')
os 模組的其他常用函式
除了前面介紹的mkdir()與rmdir(),os模組還提供幾個常用的函式。
getcwd() 函式
getcwd(get current working directory)可以取得目前的工作目錄,也就是程式執行時所在的目錄。
import os
print(os.getcwd()) # 例如:C:\example\ch09工作目錄與程式檔所在目錄不一定相同
os.getcwd()取得的是「執行程式時所在的目錄」,若要取得程式檔本身所在的目錄,應該用os.path.dirname(__file__)。兩者在某些執行方式下會不一樣,寫程式時要留意。詳見 6. os.path 路徑處理。
remove() 函式
remove()用來刪除指定的檔案(注意:不是資料夾)。由於刪除不存在的檔案會產生錯誤,一般都會先用os.path.exists()檢查再決定是否刪除。
import os
file = "myFile.txt"
if os.path.exists(file):
os.remove(file)
else:
print(file + " 檔案未建立!")| 函式 | 刪除對象 | 目錄非空時 |
|---|---|---|
os.remove(檔案) | 檔案 | 不適用 |
os.rmdir(目錄) | 空目錄 | 會產生錯誤 |
shutil.rmtree(目錄) | 目錄及其所有內容 | 可以刪除 |
os.rmdir()只能刪除空目錄實測若目錄中還有檔案,會產生錯誤:
OSError: [WinError 145] 目錄不是空的。要連同內容一併刪除,必須改用
shutil模組的rmtree()。詳見 8. shutil 檔案與目錄的複製搬移。
system() 函式
system()可以執行作業系統的命令,就像在命令提示字元中輸入指令一樣。
import os
cur_path = os.getcwd() # 取得目前路徑
os.system("cls") # 清除螢幕
os.system("mkdir dir2") # 建立 dir2 目錄
os.system("copy ossystem.py dir2\\copyfile.py") # 複製檔案
file = cur_path + "\\dir2\\copyfile.py"
os.system("notepad " + file) # 以記事本開啟檔案
os.system()不跨平台上例中的
cls、copy、notepad都是 Windows 專用的命令,在Linux/macOS上會失效(對應的是clear、cp、其他編輯器)。
純粹要做檔案複製、搬移、刪除,建議改用shutil模組,它是跨平台的。詳見 8. shutil 檔案與目錄的複製搬移。
相關主題與延伸閱讀
- 0. 章節索引:本章全部筆記的學習地圖與快速查找。
- 1. 檔案概論:先了解檔案與資料夾的基本概念,再學習資料夾的建立與刪除。
- 3. 檔案的開啟與關閉:確認資料夾存在後,接續學習如何開啟與關閉資料檔。
- 4. 文字檔資料的寫入與讀取:資料夾建立完成後,即可在其中進行檔案的寫入與讀取。
- 5. 例外處理:建立或刪除資料夾失敗時(如路徑已存在),可搭配例外處理進行防呆。
- 6. os.path 路徑處理:
os.path還提供路徑分解、組合、取得檔案大小等更多函式。 - 7. os.walk 與 glob 目錄走訪:需要一次處理整棵目錄樹或搜尋特定檔案時使用。
- 8. shutil 檔案與目錄的複製搬移:跨平台的檔案複製、搬移與遞迴刪除。