前言

Python提供os.path 套件及os套件來進行檔案的操作。
本節將介紹使用 os.path 套件的 isdir()isfile() 函式,分別來檢查指定的路徑是否為資料夾或檔案,以及使用exists()函式來檢查指定的檔案或資料夾是否存在。本節也將介紹使用os套件的mkdir() 函式來建立資料夾,及使用rmdir()函式來刪除資料夾。

isdir()、isfile() 函式

os.path 套件的isdir()isfile()函式,分別用來檢查指定的資料夾路徑名稱與檔案路徑名稱是否存在,語法如下:

os.path.isdir(資料夾路徑名稱)
 
os.path.isfile(檔案路徑名稱)
  1. 資料夾路徑名稱與檔案路徑名稱,皆屬字串型別。
  2. 若指定的路徑名稱存在,則傳回值為 True;若不存在,則傳回值為False
  3. 在使用isdir()isfile()函式前須使用import指令匯入os.path套件名稱或os套件名稱。

[簡例] (檔名:path01.py)

使用isdir()函式檢查 c:磁碟機是否存在有『c:/data/』資料夾,及使用isfile()函式檢查『c:/Windows/system.ini』檔案是否存在。

[結果]

c:/data/ 資料夾路徑不存在                                            
c:/Windows/system.ini 路徑為檔案

說明

  1. c:磁碟機已事先建立『c:/data/』資料夾,則結果會如下:
    c:/data/ 路徑為資料夾
  2. 1行:用import匯入os套件名稱。(os套件包含了os.path套件)
  3. 2行:將'c:/data/'字串指定給 pName 變數。
  4. 4行:檢查'c:/data'資料夾路徑是否存在。若存在傳回True,則執行第5行;若不存在傳回False,則執行第7行。
  5. 8,10行:'c:/Windows/system.ini'Windows系統必備的檔案,該檔案路徑必然是存在的,故會傳回True,執行第11

exists() 函式

os.path套件的exists()函式是用來指定的檔案或資料夾路徑名稱是否存在,可同時取代isdir()isfile()函式。語法如下:

os.path.exists(路徑名稱)
  1. 路徑名稱:為檔案或資料夾的路徑名稱,屬字串型別。
  2. 若指定的檔案或資料夾路徑存在,則傳回值為True;若不存在,則傳回False
  3. 在使用exists()函式前須用import匯入os.path套件名稱或 os套件名稱。

[簡例] 使用exists()函式來檢查 c:磁碟是否存在有『c:/data/』資料夾,也使用exists() 函式來檢查 『c:/Windows/system.ini』檔案是否存在。 (檔名:path02.py)

[結果]

c:/data/ 資料夾路徑不存在
c:/Windows/system.ini 路徑為檔案

mkdir() 函式

os套件的mkdir()函式是用來建立資料夾(或稱目錄)的路徑名稱,語法如下:

os.mkdir(路徑名稱)

在指定的路徑中建立資料夾,若路徑中的上一層目錄不存在,會出現錯誤。
若資料夾已存在,也會出現錯誤訊息,所以常和os.path.exists()函式或os.path.isdir()搭配使用。

[簡例] 在c:磁碟機建立『c:/data/』資料夾。 (檔名:path03.py)
[結果]

c:/data/ 路徑不存在
c:/data  資料夾建立成功

rmdir() 函式

os套件的rmdir()函式是用來刪除已存在的空資料夾(或稱目錄),語法如下:

os.rmdir(路徑名稱)
  1. 使用本函式須和 os.path.exists()函式搭配,要先確定要刪除的資料夾是否存在,才能進一步進行刪除動作。

  2. 若要刪除的資料夾不存在,或是其中有檔案時,而直接使用rmdir()函式時會
    出現錯誤訊息。

[簡例] 在c:磁碟機建立『c:/data/』資料夾。 (檔名:path04.py)

[結果]

c:/data/ 路徑目前存在
c:/data/ 路徑已刪除

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() 不跨平台

上例中的clscopynotepad都是 Windows 專用的命令,在 LinuxmacOS 上會失效(對應的是clearcp、其他編輯器)。
純粹要做檔案複製、搬移、刪除,建議改用shutil模組,它是跨平台的。詳見 8. shutil 檔案與目錄的複製搬移


相關主題與延伸閱讀