自動整理檔案時,常會需要複製、搬移、建立目錄或刪除檔案。這篇依 shutil 與 os 的用途整理範例,讓每個操作都能獨立查閱;執行前先確認來源與目的路徑。

本篇重點
  • 用 shutil 複製與搬移檔案或資料夾
  • 用 os 建立目錄、檢查路徑與刪除檔案
  • 用測試資料確認操作結果,再套用到實際檔案

原始實作記錄於 2020 年;以下操作畫面與程式範例保留當時版本。

shutil 與 os 都是 Python 標準函式庫,可直接 import,不需要另外用 pip 安裝。下列舊版安裝範例僅保留作為原始紀錄。查閱 Python 文件

以下先介紹 shutil 的高階檔案操作,再整理 os 的路徑與目錄功能。範例中的 test 名稱可自行替換,執行前要先辨認來源、目的地與目前工作目錄。


shutil模組

copytree 用於整個目錄樹;copyfile 用於檔案內容;copy 也會複製檔案權限,copy2 則盡可能保留更多中繼資料。下方 copy 範例的舊註解把來源寫成目錄,正確來源應是檔案。

  • 原始安裝紀錄(標準函式庫不需執行):
    1
    pip install pytest-shutil
  1. 複製整個資料夾樹狀結構至新資料夾

    1
    2
    3
    shutil.copytree('A','B')
    # A和B都可能是目錄位置,但B必須為不存在
    # shutil.copytree會自動產生B目錄,如果B目錄存在會出現錯誤訊息。
    • 參考寫法
      1
      2
      import shutil
      shutil.copytree('./test1/','D:/test2/')
  2. 刪除資料夾與其中全部內容

    1
    2
    import shutil
    shutil.rmtree('./test/')
  3. 複製單一檔案

    1
    2
    3
    import shutil
    shutil.copyfile('A','B')
    # A和B只能是檔案,不能是目錄位址
    • 參考寫法
      1
      shutil.copyfile('test1.jpg','test2.jpg')
  4. 將檔案複製到另一個檔名或資料夾

    1
    2
    3
    import shutil
    shutil.copy('A','B')
    # A只能是目錄,B可以是目錄或檔案
  5. 搬移檔案或資料夾

    1
    2
    3
    import shutil
    shutil.move('A','B')
    # A可以是目錄或檔案,B只能是目錄

os模組

mkdir 建立單層資料夾;makedirs 可處理多層路徑;remove 刪除檔案。需要刪除整個資料夾時,應使用對應的目錄操作,不能把檔案與資料夾的函式混用。

os 是 Python 標準函式庫,可直接匯入。

  1. 刪除單一檔案

    1
    2
    import os
    os.remove('test.jpg')
  2. 判斷資料夾(目錄)是否存在

    1
    2
    3
    import os
    if not os.path.isdir('./test/'):
    print('資料夾不存在')
  3. 新增資料夾(單層目錄)

    1
    2
    import os
    os.mkdir('./test/')
  4. 新增資料夾(多層目錄)makedirs 可建立多層目錄;當上層 test 尚未存在時,會一併建立。若目標已存在,是否容許重複建立需依參數設定處理。

    1
    2
    3
    import os
    os.makedirs('./test/hello/',exist_ok=True)
    # os.makedirs的exist_ok預設為False,如果資料夾存在的話,將會發生錯誤訊息,因此要記得修改為True,無論目錄是否存在,都會自動判斷新增。
  5. 組合路徑

    1
    2
    import os
    os.path.join('./test/','hello,jpg')
    • 原範例組合的路徑為 ./test/hello,jpg;逗號來自範例檔名,若要一般 JPG 副檔名,應使用 hello.jpg。路徑分隔符號依作業系統而異。
    1
    2
    import os
    os.path.join('./testA/','./testB/,'hello.jpg')
    • 原範例組合的路徑為 ./testA/testB/hello.jpg。join 只產生路徑字串,不會建立檔案或目錄;分隔符號會依作業系統而異。

操作前後要比對什麼

練習時先建立獨立的測試資料夾。複製後確認來源仍在、目的檔案內容相符;搬移後確認新位置與原位置;刪除前確認完整路徑,再檢查操作結果。目的地已存在時,需留意覆寫或例外訊息。

參考:Python shutil 文件。