WeHelp
學習各式各樣的內建函式、類別、物件、模組等等工具,完成各種 Python 基礎應用。
  1. 字串的操作
  2. 列表的操作
  3. 字典的操作
  4. 數學、統計模組
  5. 文字檔案讀取、寫入
  6. CSV 檔案讀取、寫入
  7. JSON 檔案讀取、寫入
  8. ZIP 壓縮檔案和解壓縮
  9. HTTP 網路連線請求
  10. 網頁爬蟲程式
  11. 日期與時間
  12. 正規表達式
ZIP 壓縮檔案和解壓縮
Python 內建的 `zipfile` 模組可用來建立、讀取、壓縮與解壓縮 ZIP 檔案,不需要額外安裝套件。 ## 1. 壓縮多個檔案 以下範例會將 `reports` 資料夾中的多個報表檔案壓縮成 `reports.zip`。 ```python from pathlib import Path from zipfile import ZipFile, ZIP_DEFLATED source_dir = Path("reports") zip_path = Path("reports.zip") with ZipFile(zip_path, mode="w", compression=ZIP_DEFLATED) as zip_file: for file_path in source_dir.glob("*.csv"): # arcname 用來指定 ZIP 內顯示的檔名, # 避免把完整的本機路徑寫入壓縮檔 zip_file.write(file_path, arcname=file_path.name) print(f"已建立壓縮檔:{zip_path}") ``` 假設目錄結構如下: ```text reports/ ├── january.csv ├── february.csv └── march.csv ``` 執行後會產生: ```text reports.zip ├── january.csv ├── february.csv └── march.csv ``` ### 重點說明 - `ZipFile(..., "w")`:建立新的 ZIP 檔案。 - `ZIP_DEFLATED`:使用常見的壓縮方式。 - `write()`:將檔案加入 ZIP。 - `arcname`:指定檔案在 ZIP 內的名稱。 - 若要包含子目錄,可使用: ```python for file_path in source_dir.rglob("*"): if file_path.is_file(): zip_file.write(file_path, arcname=file_path.relative_to(source_dir)) ``` --- ## 2. 解壓縮多個檔案 以下範例會將 `reports.zip` 中的所有檔案解壓縮到 `extracted_reports` 資料夾。 ```python from pathlib import Path from zipfile import ZipFile zip_path = Path("reports.zip") extract_dir = Path("extracted_reports") extract_dir.mkdir(exist_ok=True) with ZipFile(zip_path, mode="r") as zip_file: zip_file.extractall(extract_dir) print(f"檔案已解壓縮至:{extract_dir}") ``` 執行後的結果: ```text extracted_reports/ ├── january.csv ├── february.csv └── march.csv ``` ### 查看 ZIP 內容 如果只想先查看壓縮檔內有哪些檔案,可以使用: ```python from zipfile import ZipFile with ZipFile("reports.zip", "r") as zip_file: for name in zip_file.namelist(): print(name) ``` ### 安全提醒 對於來源不明的 ZIP 檔案,直接使用 `extractall()` 可能有路徑穿越風險。若 ZIP 來自使用者上傳或外部來源,應先驗證檔案名稱,避免解壓縮到目標資料夾之外。
相關學習地圖、教學課程
Python 資料工程
從 0 開始,成為資料工程師的學習路徑。
Python 後端工程、資料庫
從 0 開始,成為後端工程師的學習路徑。