【Python】shutil.make_archive() 方法详解
文章目录
- 功能概述
- 函数签名
- 核心参数详解
- 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
参数,可以灵活地创建各种格式的归档文件,满足不同的打包需求。