Python 以相对/绝对路径的方式压缩文件

news2024/11/17 7:35:25

文章目录

  • 1. tarfile 简单介绍
  • 2. tarfile 支持的模式
  • 3. 绝对路径压缩
  • 4. 相对路径压缩
  • 5. 参考


1. tarfile 简单介绍

Python 的 tarfile 模块提供了对 .tar 格式归档文件的全面支持,允许用户创建、读取、修改和写入 tar 归档文件。在实际应用中,tar 文件通常用于将多个文件或目录打包成一个单一的档案文件,便于存储、传输或者备份。此外,tar 文件还可以配合压缩工具(如 gzip, bzip2, 或 lzma)生成诸如 .tar.gz, .tar.bz2, 或 .tar.xz 等格式的压缩归档。

以下是一些 tarfile 模块的核心功能:

  1. 打开和创建归档

    • 使用 tarfile.open() 函数可以打开已存在的 tar 归档文件,也可以创建新的归档文件。模式参数(mode)决定了操作行为,比如 'r' 用于只读、 'w' 用于覆盖写入、 'a' 用于追加以及 'x' 用于独占创建等。
  2. 添加文件到归档

    • 创建 TarFile 对象后,可以使用 add() 方法将单个文件或整个目录结构添加到归档中。
  3. 从归档中提取文件

    • 使用 extractall() 方法可以将归档中的所有文件解压到指定目录。
    • 通过 extract() 方法可以单独提取归档内的某个成员文件。
  4. 读取归档信息

    • 可以遍历 TarFile 对象获取每个成员(即归档中的文件)的信息,包括名称、大小、权限、时间戳等。
    • 也可以通过 getmember() 方法查找并返回特定成员的信息。
  5. 支持压缩

    • 如上述模式参数所示,tarfile.open() 函数可以直接处理压缩过的 tar 归档文件,并且支持多种压缩格式,如 'r:gz' 表示读取gzip压缩的tar文件, 'w:xz' 表示创建lzma压缩的tar文件等。
  6. 其他高级功能

    • 支持自定义归档成员的属性(metadata)。
    • 支持存档加密(尽管标准tarfile模块不直接提供加密功能,但可以通过与其他库结合实现)。

举例说明如何使用 tarfile 模块创建一个简单的tar归档:

import tarfile

# 创建一个新的tar归档文件(不压缩)
with tarfile.open("example.tar", mode="w") as tar:
    # 将当前目录下的"file.txt"文件添加到归档
    tar.add("file.txt")

# 打开一个已存在的gzip压缩过的tar归档文件进行读取
with tarfile.open("example.tar.gz", mode="r:gz") as tar:
    # 提取归档中的所有文件到当前目录
    tar.extractall()

2. tarfile 支持的模式

modeaction
'r''r:*'Open for reading with transparent compression (recommended). 自动解压并打开文件–推荐模式
'r:'Open for reading exclusively without compression. 只打开文件不解压
'r:gz'Open for reading with gzip compression. 采用gzip格式解压并打开文件
'r:bz2'Open for reading with bzip2 compression. 采用bz2格式解压并打开文件
'r:xz'Open for reading with lzma compression. 采用lzma格式解压并打开文件
'x''x:'Create a tarfile exclusively without compression. Raise an [FileExistsError]exception if it already exists. 仅创建打包文件,不压缩
'x:gz'Create a tarfile with gzip compression. Raise an [FileExistsError]exception if it already exists. 采用gzip方式压缩并打包文件
'x:bz2'Create a tarfile with bzip2 compression. Raise an [FileExistsError]exception if it already exists. 采用bzip2方式压缩并打包文件
'x:xz'Create a tarfile with lzma compression. Raise an [FileExistsError]exception if it already exists. 采用lzma方式压缩并打包文件
'a''a:'Open for appending with no compression. The file is created if it does not exist. 打开文件,并以不压缩的方式追加内容。如果文件不存在,则新建
'w''w:'Open for uncompressed writing. 以不压缩的方式写入,即只归档不压缩
'w:gz'Open for gzip compressed writing. 以gzip的方式压缩并写入
'w:bz2'Open for bzip2 compressed writing. 以bzip2的方式压缩并写入
'w:xz'Open for lzma compressed writing. 以lzma的方式压缩并写入

3. 绝对路径压缩

下面对 /User/xx/data/file.txt 进行压缩,这个是以绝对路径压缩的。

    def compress(compress_file_path, ori_file_path):
        with tarfile.open(compress_file_path, "w:gz") as tar:
            tar.add(ori_file_path)
if __name__ == "__main__":
	compress("~/dataset/outfile.tgz", "~/dataset/file.txt")

绝对路径压缩后,其解压后如下:
在这里插入图片描述
也就是说会保留你当时解压时的绝对路径!

4. 相对路径压缩

增加参数 arcname,例如,下面对 /User/xx/data/file.txt 进行压缩,这个是以相对路径压缩的,即在任何地方解压后就直接可以得到这个文件file.txt

    def compress(compress_file_path, ori_file_path):
        with tarfile.open(compress_file_path, "w:gz") as tar:
            tar.add(ori_file_path, arcname=os.path.basename(ori_file_path))

if __name__ == "__main__":
	compress("/User/xx/data/outfile.tgz", "/User/xx/data/file.txt")

5. 参考

https://www.cnblogs.com/hls-code/p/16626565.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1385374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue-vben-admin 与.net core 结合实例 【自学与教学 小白教程】---第4节---部门管理

ue-vben-admin 与.net core 结合实例 这里计划使用.net core 作为后端 。目标:打造好看 易用 开箱即用 的netcore一体化框架。Vue Vben Admin For NetCore 取命 hcrain-vvadmin 我不是前端人员 但有时开发还是要写一些界面。 之前使用layui是时候 狠心升级下了。 …

TongLINKQ(2):TongLINKQ服务端安装

1 安装前的准备 明确应用(JDK)和TongLINK/Q的版本、位数(要么都是32位,要么都是64位)TLQ安装程序使用InstallAnywhere打包而成,因此需要JDK1.5及以上版本。 2 安装步骤 3 选择安装安装包 目前TongLINKQ的…

4. Mybatis 事务和Spring事务关系

大体上分为两种情况:方法上添加了事务注解Transactional 和方法上没有添加事务注解Transactional。 添加了Transactional 注解的在注入 bean 的时候就会被创建代理类,在代理类中使用增强逻辑进行事务处理。没有添加Transactional 注解的,在 …

文件模块常用api

文件模块常用api 文件夹常用操作 文件夹操作 fs.mkdir fs.rmdir 需要是空目录 题目:递归删除目录* 串行/并行删除文件*

肯尼斯·里科《C和指针》第6章 指针(4)实例

肯尼斯里科《C和指针》第6章 指针&#xff08;1&#xff09;-CSDN博客 肯尼斯里科《C和指针》第6章 指针&#xff08;2&#xff09;-CSDN博客 肯尼斯里科《C和指针》第6章 指针&#xff08;3&#xff09;-CSDN博客 6.12 实例 /* ** 计算一个字符串的长度。 */ #include <…

SSL证书怎么选?

首先&#xff0c;我们需要理解不同类型的SSL证书及其费用差异。通常情况下&#xff0c;SSL证书分为域名验证型&#xff08;DV&#xff09;、组织验证型&#xff08;OV&#xff09;和企业验证型&#xff08;EV&#xff09;三种。其中&#xff0c;DV证书是最常见的类型&#xff0…

入驻商城小程序系统源码:众多自定义组件以及营销插件随心搭,独立部署,带完整的搭建教程

现如今&#xff0c;互联网在不断的发展&#xff0c;小程序已成为电商行业的重要战场。入驻商城小程序系统源码正是基于这一背景&#xff0c;为用户提供了一套功能强大、易于定制的电商解决方案。该源码拥有众多自定义组件和营销插件&#xff0c;支持独立部署&#xff0c;并附带…

芯课堂 | 华芯微特MCU在PCB板级设计中对ISP引脚的应用

1.应用描述 ISP&#xff08;In System Programming&#xff09;&#xff0c;在系统编程&#xff0c;使用片内驻留出厂引导程序&#xff08;BootROM&#xff09;配合UART / SPI等外设进行烧录。 华芯微特全系MCU的ISP操作说明&#xff1a;当芯片上电后检测到 ISP 引脚持续 5ms…

聚甲基丙烯酸甲酯PMMA的特性有哪些?UV胶水能够粘接聚甲基丙烯酸甲酯PMMA吗?又有哪些优势呢?

聚甲基丙烯酸甲酯&#xff08;Polymethyl Methacrylate&#xff0c;PMMA&#xff09;&#xff0c;又称丙烯酸甲酯&#xff0c;是一种常见的透明塑料&#xff0c;具有许多特性&#xff0c;使其在各种应用领域中广泛使用。以下是PMMA的一些主要特性&#xff1a; 1. 优异的透明性&…

【极光系列】springBoot集成Hibernate

【极光系列】springboot集成hibernate gitee地址 直接下载可用 https://gitee.com/shawsongyue/aurora.git 模块&#xff1a;aurora_hibernate mysql安装教程 参考我另外一篇文章&#xff0c;直接下载安装 https://blog.csdn.net/weixin_40736233/article/details/1355829…

入站请求负载均衡解决方案 LVS 的介绍

概述 LVS 简介 LVS&#xff08;Linux Virtual Server&#xff09;即 Linux 虚拟服务器&#xff0c;是一个虚拟的服务器集群系统。 通过 LVS 的负载均衡技术和 LINUX 操作系统可以实现一个高性能、高可用的 LINUX 服务器集群&#xff0c;它具有良好的可靠性、可扩展性和可操作性…

PVE虚拟机安装qemu guest agent

pve虚拟机安装guest agent&#xff0c;使web平台可以直接显示虚拟机的ip&#xff0c;方便管理。 一、虚拟机需开启Qemu代理 首先&#xff0c;虚拟机需开启Qemu代理&#xff0c;需要关闭虚拟机再启动虚拟机并安装agent。网上有些文章说要把网卡配置为virtio&#xff0c;经测试是…

MATLAB - 计算关节扭矩以平衡端点力和力矩

系列文章目录 前言 产生力矩以平衡作用在平面机器人末端执行器体上的端点力。要使用各种方法计算关节力矩&#xff0c;请使用刚体树机器人模型的几何雅各比&#xff08;geometricJacobian&#xff09;和反动力学&#xff08;inverseDynamics&#xff09;对象函数。 一、初始化…

在IntelliJ IDEA上使用通义灵码(TONGYI Lingma)

参考链接&#xff1a; 通义灵码产品介绍_智能编码助手_AI编程_云效(Apsara Devops)-阿里云帮助中心 【IDEA如何使用通义灵码&#xff1f;】_idea 通义灵码-CSDN博客 1. 简介 1.1 定义 通义灵码&#xff0c;是阿里云出品的一款基于通义大模型的智能编码辅助工具&#xff0c;提…

单细胞转录组学对代谢功能障碍相关脂肪变性肝病的类器官模型进行分析

前言 最近接触比较多肝纤维化项目&#xff0c;包括空转、单细胞和普通的BULK转录组&#xff0c;本文是肝脏疾病类器官构建&#xff0c;所以结果是比较确定的&#xff0c;只是对比不同处理和培养哪种效果更好&#xff0c;适合了解纤维化进展和哪些分子和细胞参与&#xff0c;以…

基于协方差矩阵自适应演化策略(CMA-ES)的高效特征选择

特征选择是指从原始特征集中选择一部分特征&#xff0c;以提高模型性能、减少计算开销或改善模型的解释性。特征选择的目标是找到对目标变量预测最具信息量的特征&#xff0c;同时减少不必要的特征。这有助于防止过拟合、提高模型的泛化能力&#xff0c;并且可以减少训练和推理…

CANFD数据记录仪在新能源汽车复杂路测下的应用

CANFD数据记录仪在新能源汽车复杂路测下的应用 汽车制造商在生产预批量阶段的耐久性测试中,为了检测潜在故障,必须让车辆在严酷的路况和环境下接受测试。为确保能回溯故障发生的现场情况,我们需要对测试数据精准记录与储存。这些数据是新车型优化迭代的关键,也是确保产品质量的…

【优选算法】滑动窗口 {何时使用滑动窗口?如何使用滑动窗口?如何确定更新结果的时机?滑动窗口是如何提高效率的?相关编程题解析}

一、经验总结 何时使用滑动窗口&#xff1f; 在使用暴力解法解题时&#xff0c;发现可以将其优化为同向双指针&#xff0c;既可以使用滑动窗口。 如何使用滑动窗口&#xff1f; 1. 定义窗口控制变量n&#xff0c;进窗口&#xff0c;判断&#xff0c;出窗口都需要操作窗口控制…

天软特色因子看板 (2024.01 第7期)

该因子看板跟踪天软特色因子A04001(当日趋势强度)&#xff0c;该因子为反映股价走势趋势强弱&#xff0c;用以反映股价走势趋势强弱&#xff0c;abs(值)越接近1&#xff0c;趋势 性越强&#xff0c;符号代表涨跌方向。 今日为该因子跟踪第7期&#xff0c;跟踪其在SW801050 (申万…

Open CV 图像处理基础:(六)在Java中使用 Open CV进行图片翻转和图片旋转

在Java中使用 Open CV进行图片翻转和图片旋转 目录 在Java中使用 Open CV进行图片翻转和图片旋转前言图片翻转函数代码示例其它翻转方向垂直翻转两轴翻转 图片旋转函数代码示例 Open CV 专栏导航 前言 在Java中使用OpenCV进行图片翻转和旋转是一种基本的图像处理技术&#xff0…