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

文章目录

  • 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

护眼台灯是智商税吗?写作业使用的护眼台灯推荐

在当今社会,越来越多的人在工作和生活中长时间地盯着电脑屏幕或手机屏幕,给眼睛带来了很大的压力和损害。为了缓解眼睛的疲劳和不适,护眼台灯成为了很多人的选择。然而,市场上的护眼台灯种类繁多,价格各异,…

M-A352AD10高精度三轴加速度计

一般描述 M-A352是一种三轴数字输出加速度计,具有超低噪声、高稳定性、低功耗等特点,采用了夸特的精细处理技术。. 多功能M-A352具有高精度和耐久性,非常适合广泛的具有挑战性的应用,如SHM、地震观测、工业设备的状态监测和工业…

pandas查看数据常用方法(以excel为例)

目录 1.查看指定行数的数据head() 2. 查看数据表头columns 3.查看索引index 4.指定索引列index_col 5.按照索引排序 6.按照数据列排序sort_values() 7.查看每列数据类型dtypes 8.查看指定行列数据loc 9.查看数据是否为空isnull() 1.查看指定行数的数据head() &#xff…

软信天成:数据安全管理解决方案分享

近年来,随着数据环境日趋复杂多变和潜在的数据隐私泄露风险潜伏,如何确保企业数据安全已成为众多企业亟待面对与妥善处理的重要问题。 为了应对这一严峻的现实挑战,软信天成凭借专业的知识体系和丰富的实战经验积累,总结出了一套…

Java实现海南旅游景点推荐系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

计算机组成原理-程序中断(基本概念 中断分类 流程 )

文章目录 总览中断的基本概念中断请求的分类中断请求标记中断判优-实现中断判优-优先级设置中断处理过程-中断隐指令中断处理过程-中断服务程序小结 总览 中断的基本概念 中断隐指令就是修改PC的值到中断服务程序 在每条指令执行完后,在指令周期末尾检查是否有中断…

【linux】软链接创建(linux的快捷方式创建)

软连接的概念 类似于windows系统中的快捷方式。有的文件目录很长或者每次使用都要找很不方便,于是可以用类似windows的快捷方式的软链接在home(初始目录类似于桌面)上创建一些软链接方便使用。 软链接的语法 ln -s 参数1 参数2 参数1&#…

批评与自我批评组织生活会发言材料2024年六个方面

生活就像一场马拉松,成功需要坚持不懈的奔跑。每一步都可能会遇到挫折和困难,但只要你努力向前,坚持不放弃,你就一定能够迎接胜利的喜悦。不要害怕失败,因为失败是成功的垫脚石。相信自己的能力,追求自己的…

反射助你无痛使用Semantic Kernel接入离线大模型

本文主要介绍如何使用 llama 的 server 部署离线大模型,并通过反射技术修改 Semantic Kernel 的 OpenAIClient 类,从而实现指定端点的功能。最后也推荐了一些学习 Semantic Kernel 的资料,希望能对你有所帮助。 封面图片: Dalle3 …

Java零基础教学文档servlet(1)

【Web开发和HTTP协议】 1. Web开发概述 1.1 web概述 万维网(英语:World Wide Web)亦作WWW、Web、全球广域网,是一个透过互联网访问的,由许多互相链接的超文本组成的信息系统。英国科学家蒂姆伯纳斯-李于1989年发明了…

更换为mainwindow.ui更新工程架构

文章目录 前言一、新建带mainwindow.ui的工程1.新建工程2. 添加工程模块添加opencv的库3.添加资源3.1工程上添加资源3.2引用资源 4.添加曲线文件4.1 复制关键文件到新工程4.2 新进显示曲线的ui带.h的为了方面名字取一样4.3添加曲线显示控件4.4 添加工具 5. 添加曲线.h文件内容6…

OpenCV-Python(39):Meanshift和Camshift算法

目标 学习了解Meanshift 和Camshift 算法在视频中找到并跟踪目标 Meanshift 原理 Meanshift算法是一种基于密度的聚类算法,用于将数据点划分为不同的类别。它的原理是通过数据点的密度分布来确定聚类中心,然后将数据点移动到离其最近的聚类中心&#…

UIAlertController简单使用-swift

UIAlertControlle时IOS的对话框控制器(警报控制器),简单使用方法如下: 步骤都一样,先是创建UIAlertController,然后创建UIAlertAction,再将UIAlertAction添加到UIAlertController中,…

PyTorch深度学习实战(30)——Deepfakes

PyTorch深度学习实战(30)——Deepfakes 0. 前言1. Deepfakes 原理2. 数据集分析3. 使用 PyTorch 实现 Deepfakes3.1 random_warp.py3.2 Deepfakes.py 小结系列链接 0. 前言 Deepfakes 是一种利用深度学习技术生成伪造视频和图像的技术。它通过将一个人的…

TongLINKQ(2):TongLINKQ服务端安装

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

相信我,努力真的有用!

2023年对很多人来说都是异常艰辛的一年,大环境下的每个人都面对着或多或少的挑战,在这一年的时间里,身边的朋友陆陆续续的跳槽、创业、再就业,结婚,生娃,回老家,每个人渐渐的在时代面前或妥协或…

快速入门Java NIO(New I/O)的网络通信框架--Netty

Netty 入门 了解netty前需要对nio有一定认识,该笔记基础来自bilinbili黑马,在此基础上自己学习的笔记,添加了一些自己的理解 了解java 非阻塞io编程 1. 概述 1.1 Netty 是什么? Netty is an asynchronous event-driven network application framework for rapid …

Linux系统的通配符* ,你可能还不知道的一些规则 。

最近老被同学问到关于通配符操作的问题,本来觉得是一个很简单的问题,结果它和其它命令一结合,就很难给出合理的理解 。进行了很多实验,总是难以有个满意的答案 。于是决定要好好研究一番 ,终于在多次的测试和验证过程中…

ElasticSearch分布式搜索引擎(两万字详解)

文章目录 ElasticSearch分布式搜索引擎1.了解ESELK技术栈elasticsearch和lucene为什么不是其他搜索技术?总结倒排索引正向索引倒排索引正向和倒排 es的一些概念文档和字段索引和映射mysql与elasticsearch 2.安装elasticsearch1.部署单点es1.1.创建网络1.2.拉取镜像1…

N5181A/安捷伦Agilent N5181A信号发生器

181/2461/8938产品概述: 规格(说明书):表示已校准的仪器在工作温度范围0-55C内存放至少2小时,除非另有说明,并经过45分钟预热期后的保证性能。的指标包括测量不确定度。除非另有说明,本文档中的…