文章目錄
- 功能概述
- 函數簽名
- 核心參數詳解
- 1. base_name
- 2. format
- 3. root_dir
- 4. base_dir
- 使用示例
- 將 /home/user/project/data 目錄打包為 data.tar.gz,并保存到 /home/user/backups/
- 打包當前工作目錄下的 docs 文件夾為 zip 文件
- 替代方案
- 總結
shutil.make_archive()
是
Python
標準庫
shutil
模塊提供的一個用于
創建歸檔文件(如
ZIP
、
TAR
等)的高級函數。它簡化了
文件壓縮和打包的過程,支持多種歸檔格式。
功能概述
shutil.make_archive()
可以:
- 將指定目錄或文件打包成壓縮文件
- 支持多種歸檔格式(
ZIP
、TAR
、BZ2
、XZ
等) - 自動處理文件路徑和歸檔結構
函數簽名
shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])
我們重點關注前四個常用參數:base_name
, format
, root_dir
, base_dir
,其他參數較為少見,可以參考官方文檔了解更多信息。
核心參數詳解
1. base_name
- 類型:
str
- 作用: 指定歸檔文件的基本名稱(不含擴展名),最終輸出文件路徑由該名稱加上格式后綴組成。
- 說明:
- 可以是絕對路徑或相對路徑;如果是相對路徑,歸檔文件會在 當前工作目錄(cwd) 下創建。
- 函數會自動根據
format
參數添加相應的擴展名。
- 如果目標歸檔文件已存在,會被靜默覆蓋
- 需要有對源文件的讀取權限和對目標位置的寫入權限
2. format
- 類型:
str
- 作用: 指定歸檔格式
- 支持的格式:
- ‘zip’ -
ZIP
格式 - ‘tar’ -
TAR
格式 - ‘bztar’ -
bzip2
壓縮的TAR
- ‘xztar’ -
xz
壓縮的TAR
- ‘gztar’ -
gzip
壓縮的TAR
- ‘zip’ -
3. root_dir
- 類型:
str
- 作用: 定義歸檔的根目錄,在創建歸檔文件之前會將當前工作目錄切換為
root_dir
。 - 默認值:
None
(表示使用當前工作目錄) - 說明: 歸檔文件中所有路徑都將相對于此目錄。這樣做的好處是歸檔文件中不會包含多余的路徑信息。
4. base_dir
- 類型:
str
- 作用: 定義要歸檔的具體子目錄或文件路徑,相對于
root_dir
的路徑, - 默認值:
None
(表示使用root_dir
) - 說明: 一般為
None
(表示使用root_dir
)或為root_dir
的某個子目錄或文件的名稱
使用示例
將 /home/user/project/data 目錄打包為 data.tar.gz,并保存到 /home/user/backups/
make_archive(base_name='/home/user/backups/data',format='gztar',root_dir='/home/user/project',base_dir='data')
或者
make_archive(base_name='/home/user/backups/data',format='gztar',root_dir='/home/user/project/data',base_dir=None)
都會生成文件/home/user/backups/data.tar.gz
,區別是第一種方式生成的歸檔文件中有根目錄data
,而第二種方式生成的歸檔文件中直接就是data
的所有子目錄。
打包當前工作目錄下的 docs 文件夾為 zip 文件
make_archive(base_name='docs_backup',format='zip',root_dir=None, # 等效于'.'base_dir='docs')
替代方案
如果需要更細粒度的控制,可以考慮:
zipfile
模塊 (專門處理ZIP
文件)tarfile
模塊 (專門處理TAR
文件)- 第三方庫如
pyzipper
(增強版ZIP
處理)
shutil.make_archive()
的優勢在于它提供了簡單的一站式解決方案,適合大多數常見打包需求。
總結
shutil.make_archive()
是Python
中一個非常實用的歸檔工具,通過合理設置 base_name
、format
、root_dir
和 base_dir
參數,可以靈活地創建各種格式的歸檔文件,滿足不同的打包需求。