在 Python 中,使用 tarfile
模块可以将多个文件压缩成一个 .tar
文件。下面是一个示例,演示如何将多个指定文件压缩到一个 .tar
文件中:
python
import tarfile
import os
def create_tar_archive(archive_name, files_to_compress, compression=None):
"""
创建一个 tar 压缩包,包含指定的多个文件。
参数:
archive_name (str): 压缩包文件名(包括扩展名,如 'example.tar' 或 'example.tar.gz')
files_to_compress (list[str]): 待压缩的文件列表,每个元素为文件的绝对路径
compression (str): 压缩类型,可选值包括 'gz', 'bz2', 'xz',如果为 None,则仅创建未压缩的 tar 文件
"""
# 确保所有指定的文件都存在
for file_path in files_to_compress:
if not os.path.isfile(file_path):
raise FileNotFoundError(f"{file_path} does not exist or is not a regular file.")
# 根据压缩类型构建模式字符串
mode = 'w:' + compression if compression else 'w'
with tarfile.open(archive_name, mode) as tar:
for file_path in files_to_compress:
tar.add(file_path, arcname=os.path.basename(file_path))
# 使用示例
files_to_compress = [
'/path/to/file1.txt',
'/path/to/file2.pdf',
'/path/to/directory1/file3.jpg',
]
create_tar_archive('my_archive.tar', files_to_compress)
在这个示例中:
- 定义一个名为
create_tar_archive
的函数,接受压缩包名称、待压缩文件列表和压缩类型作为参数。 - 遍历
files_to_compress
列表,检查每个文件是否存在,若不存在则抛出异常。 - 根据
compression
参数构建模式字符串,如'w:gz'
(表示 gzip 压缩)或'w'
(表示无压缩)。 - 使用
tarfile.open()
函数以指定模式打开一个 tar 文件,准备写入。 - 遍历
files_to_compress
列表,对每个文件调用tar.add()
方法,将它们添加到 tar 文件中。arcname
参数用于指定在 tar 文件内部的相对路径(这里使用文件的基名)。 - 使用
with
语句确保 tar 文件在操作完成后会被正确关闭。
如果您需要创建压缩类型的 tar 文件(如 .tar.gz
、.tar.bz2
或 .tar.xz
),只需在调用函数时传入相应的 compression
参数即可。如果不需要压缩,只需传递 compression=None
或省略该参数。
确保您有足够的权限创建和写入目标压缩包文件,并且指定的文件列表中包含您希望打包的所有文件的绝对路径。如果您需要包含整个目录及其内容,可以将目录路径添加到 files_to_compress
列表中,但请注意,这样做会将目录本身作为一个条目添加到 tar 文件中,而不是仅包含目录内的文件。如果您希望递归包含目录内容,可以参照之前的回答中创建 tar 包包含目录的示例进行修改。