python tarfile压缩包操作保姆级教程
前言
上次写博客还在去年的8月底了,期间有了小宝,换工作等诸多事宜让我踩坑采的起飞,时隔4个月,逐渐找回状态。这篇的主题是python的第三方库zipfile
,因工作中要处理大量的压缩包zip文件,所以趁着自由时间整理输出下,以提高下工作的愉悦感。
1、tarfile
这个工具可以帮我们解决 zip 压缩包的创建、读取、写入、添加、列出内部所有的成员。更高效的处理压缩包,已达到快速处理数据的目的。
入口1:tarfile.open(name=“sample.zip”)
tar = tarfile.open(name="sample.zip")
,针对路径名 name 返回 TarFile 对象。这个对象可以用来解压所有、解压出其中符合规则的文件、添加、写入等。
import tarfile tar = tarfile.open("sample.zip") # or tar = tarfile.open("sample.tar.gz") tar.extractall() tar.close()
入口2:tarfile.is_tarfile(name)
tarfile.is_tarfile(name)
,判断文件是不是tar包,name为文件的路径
import tarfile if tarfile.is_tarfile("./tartest/tar_1.tar"): print(1)
2、处理 open 后的 TarFile 对象
TarFile 对象可在 with 语句中作为上下文管理器使用。 当语句块结束时它将自动被关闭。tarfile对象主要用来:
- 生成归档的成员name
- 生成归档的成员 tarnifo 对象
- 判断某文件在不在归档中
- 将归档成员的相信信息打到界面上
- 解压整个tar包到指定目录
- 解压tar包的某个文件到指定目录
- 将归档中的一个成员提取为文件tarinfo对象
- 将指定目录下的 jiao.txt 压缩到指定目录下的 tar 包,tar不存在则新建一个,存在,则替换里面的内容
import tarfile # if tarfile.is_tarfile("./tartest/tar_1.tar"): # print(1) tar = tarfile.open("./tartest/tar_1.tar") print("以 tarinfo 返回归档的成员:", tar.getmembers()) # 以 tarinfo 返回归档的成员: [<TarInfo 'tar_1' at 0x1a74e3c57c0>, <TarInfo 'tar_1/jiao.txt' at 0x1a74e3c5e80>] print("以 名称 返回归档的成员:", tar.getnames()) # 以 名称 返回归档的成员: ['tar_1', 'tar_1/jiao.txt'] print("如果name在归档中找到,则返回True", tar.getmember(name = "tar_1/jiao.txt")) # 如果name在归档中找到,则返回True <TarInfo 'tar_1/jiao.txt' at 0x1a74e3c5e80> if tar.getmember(name="tar_1/jiao.txt"): print("找到了") print("【将内容清单打印到 sys.stdout】", tar.list()) """ ?rwxrwxrwx 0/0 0 2023-02-03 23:37:40 tar_1/ ?rwxrwxrwx 0/0 15 2023-02-03 23:37:56 tar_1/jiao.txt """ tar.extractall(path="./new_tar_file/") # 当前目录下生成目录 new_tar_file tar.extract(member="tar_1/jiao.txt", path="./new_tar_file1/") # 从归档中提取出一个成员放入指定目录,默认当前目录。大多数情况下使用 extractall() print("【将归档中的一个成员提取为文件对象】", tar.extractfile(member="tar_1/jiao.txt")) # 【将归档中的一个成员提取为文件对象】 <ExFileObject name='./tartest/tar_1.tar'> # 将当前目录下的 jiao.txt 压缩到指定目录下的 tar 包,tar不存在则新建一个,存在,则替换里面的内容 tar1 = tarfile.open(name="./tartest/tar_3.tar", mode="w|") tar1.add(name="./jiao.txt") tar1.close() # 关闭 tarfile 对象 # 暂不清楚的 """ tar.addfile() 将 TarInfo 对象 tarinfo 添加到归档 tar.gettarinfo() 基于 os.stat() 的结果或者现有文件的相同数据创建一个 TarInfo """
3、处理2中返回的 TarInfo 对象
TarInfo 对象代表 TarFile 中的一个文件,除了会存储所有必要的文件属性(例如文件类型、大小、时间、权限、所有者等),它还提供了一些确定文件类型的有用方法。 此对象 并不 包含文件数据本身(意思你拿不到txt文本里面的数据)。
import tarfile tar = tarfile.open("./tartest/tar_1.tar") tarinfos = tar.getmembers() for tarinfo in tarinfos: print("基于 TarInfo 对象创建一个字符串缓冲区", i.tobuf()) print(tarinfo.name, "tar包成员的名称") print(tarinfo.size, "tar包成员的大小") print(tarinfo.mtime, "上次修改的时间") print(tarinfo.mode, "权限位") print(tarinfo.type, "文件类型") print(tarinfo.linkname, "目标文件名的名称,该属性仅在类型为 LNKTYPE 和 SYMTYPE 的 TarInfo 对象中存在") print(tarinfo.uid, tarinfo.gid, tarinfo.uname, tarinfo.gname) if tarinfo.isfile(): print("如果 Tarinfo 对象为普通文件则返回 True") if tarinfo.isdir(): print("如果为目录则返回 True") if tarinfo.issym(): print("如果为符号链接则返回 True") if tarinfo.islnk(): print("如果为硬链接则返回 True") # 还有其他不常用的,不深入研究了
4、示例
如何将整个 tar 归档提取到当前工作目
import tarfile tar = tarfile.open("sample.tar.gz") tar.extractall() tar.close()
如何通过 TarFile.extractall()
使用生成器函数而非列表来提取一个 tar包成员的子集
import os import tarfile def py_files(members): for tarinfo in members: # os.path.splitext(路径) 用来分离文件名与拓展名 if os.path.splitext(tarinfo.name)[1] == ".sql": yield tarinfo tar = tarfile.open("sample.tar.gz") tar.extractall(members=py_files(tar)) tar.close()
将一堆文件压缩成tar包:
import tarfile tar = tarfile.open("sample.tar", "w") for name in ["foo.txt", "bar.txt", "quux.txt"]: tar.add(name) tar.close()
使用 with 语句将一堆文件压缩成tar包
import tarfile with tarfile.open("sample.tar", "w") as tar: for name in ["foo", "bar", "quux"]: tar.add(name)
读取一个 gzip 压缩的 tar 包并显示一些成员信息
import tarfile tar = tarfile.open("sample.tar.gz", "r:gz") for tarinfo in tar: print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="") if tarinfo.isreg(): print("a regular file.") elif tarinfo.isdir(): print("a directory.") else: print("something else.") tar.close()
创建一个归档并使用 TarFile.add()
中的 filter
形参来重置用户信息
import tarfile def reset(tarinfo): tarinfo.uid = tarinfo.gid = 0 tarinfo.uname = tarinfo.gname = "root" return tarinfo tar = tarfile.open("sample.tar.gz", "w:gz") tar.add("foo", filter=reset) tar.close()
到此这篇关于python tarfile压缩包操作保姆级教程的文章就介绍到这了,更多相关python tarfile内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Python实现PowerPoint演示文稿到图片的批量转换
PowerPoint演示文稿作为展示创意、分享知识和表达观点的重要工具,被广泛应用于教育、商务汇报及个人项目展示等领域,用Python代码可以高效地实现PowerPoint演示文稿到图片的批量转换,从而提升工作效率,文本将介绍如何使用Python实现PowerPoint演示文稿到图片的转换2024-06-06pyqt5教程QGraphicsScene及QGraphicsView使用基础
这篇文章主要为大家介绍了pyqt5教程中QGraphicsScene及QGraphicsView使用基础,有序要的朋友可以借鉴参考下,希望能够有所帮助2021-10-10Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
这篇文章主要介绍了基于opencv的简单图像轮廓形状识别(全网最简单最少代码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-01-01python爬虫中get和post方法介绍以及cookie作用
本篇文章通过爬取163邮箱实例介绍了python爬虫中get和post方法介绍以及cookie作用,对此有兴趣的朋友学习下。2018-02-02
最新评论