python 实现将文件或文件夹用相对路径打包为 tar.gz 文件

本文介绍了一种使用Python的tarfile模块来创建tar.gz文件的方法,特别关注如何将绝对路径转换为相对于指定目录的路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

默认情况下,tarfile 打包成的 tar.gz 文件会带绝对路径,而很多情况下,我们需要的是相对打包文件夹的路径。

代码:

<pre name="code" class="python"><span style="font-size:18px;">import tarfile
tmp_tar_dir = "/home"
file_name = "test.tar.gz"
tmp_dir = "/home/centos"
soft_name = "php"
tar = tarfile.open(os.path.join(tmp_tar_dir,file_name),"w:gz")
for root,dir,files in os.walk(os.path.join(tmp_dir,soft_name)):
    root_ = os.path.relpath(root,start=tmp_dir)
    #tar.add(root,arcname=root_)
    for file in files:
        full_path = os.path.join(root,file)
        tar.add(full_path,arcname=os.path.join(root_,file))
tar.close()</span>


 注意:打包出来的文件,如果原目录总存在空文件夹,则打包出来的文件中不包含此空文件夹。 

### Python 中处理 tar.gz 文件的方法 在 Python 中,可以利用内置模块 `tarfile` 来解压操作 `.tar.gz` 文件。以下是具体方法: #### 使用 `tarfile` 解压 `.tar.gz` 文件 通过 `tarfile.open()` 方法打开 `.tar.gz` 文件,并指定模式为 `'r:gz'` 表示读取 gzip 压缩的 tar 文件[^1]。 ```python import tarfile def extract_tar_gz(file_path, output_dir): with tarfile.open(file_path, 'r:gz') as tar: tar.extractall(path=output_dir) # 调用函数 extract_tar_gz('example.tar.gz', './output_directory') ``` 此代码片段展示了如何定义一个函数来解压 `.tar.gz` 文件到指定目录。其中,`file_path` 是目标压缩包路径,而 `output_dir` 则是希望提取文件的目标位置。 #### 查看 `.tar.gz` 文件中的内容而不解压 如果仅需查看 `.tar.gz` 文件的内容列表,则可以通过如下方式实现: ```python import tarfile def list_tar_contents(tar_file): with tarfile.open(tar_file, 'r:gz') as file: for member in file.getmembers(): print(member.name) list_tar_contents('example.tar.gz') ``` 这段脚本能够打印出给定 `.tar.gz` 文件内的所有成员名称,帮助确认其内部结构[^1]。 #### 创建一个新的 `.tar.gz` 文件 除了解压外,还可以创建新的 `.tar.gz` 归档文件并加入多个文件者整个文件夹至该档案中去。 ```python import os import tarfile def create_tar_gz(output_filename, source_dir): with tarfile.open(output_filename, "w:gz") as tar: tar.add(source_dir, arcname=os.path.basename(source_dir)) create_tar_gz('new_archive.tar.gz', '/path/to/source_folder') ``` 这里展示了一个用于打包某个源文件夹成新`.tar.gz`存档的功能性例子[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值