python tarfile压缩包操作保姆级教程
作者:阿_焦 发布时间:2022-03-29 21:38:30
前言
上次写博客还在去年的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()
来源:https://blog.csdn.net/weixin_45451320/article/details/128877371
猜你喜欢
- 1.plt.pie()饼图 常常用来显示 整体中各部分所占的比例,在python-matplotlib库中通过plt.pie()方法来实现。
- 字符串在Python内部的表示是Unicode编码,因此,在做编码转换时,通常需要以Unicode作为中间编码,即先将其他编码的字符串解码(
- list*n生成多维数组与for循环生成多维数组的区别本文主要介绍生成二维数组的方法,同时解释使用list * n 方式所存在的问题。1.从
- 本文实例为大家分享了利用opencv实现SIFT特征提取与匹配的具体代码,供大家参考,具体内容如下1、SIFT1.1、sift的定义SIFT
- Access 操作很简单,具体不步骤如下:打开你mdb数据库,工具-->数据库实用工具-->压缩和修复数据库(c)... SQL SERVE
- 一、说明压缩和解压缩是日常常用的操作,不管是windows上图形界面的操作,还是linux上用命令来进行压缩解压缩,总的而言都还是比较方便的
- 前言我们在前面的例子里,我们学习使用集合里字符或非集合里的字符,这时都是要把每个字符写出来的,但是有时需要把26个小写字母都放到集合里,那么
- 前言最近在工作经常会碰到对字符串进行去重操作,下面就给大家列出用Python如何处理的,话不多说了,来一起看看详细的介绍吧。比如说,要拿下面
- HTML5 是近十年来 Web 标准最巨大的飞跃。和以前的版本不同,HTML 5 并非仅仅用来表示 Web 内容,它的使命是将 W
- 内容导读TorchVision Transforms API 扩展升级,现已支持目标检测、实例及语义分割以及视频类任务。新 API 尚处于测
- ⛳️ 实战场景本篇博客为大家再次带来 Go 语言的基础知识,这次要学习的内容是 Go 中的文件操作。打开关闭文件在 Go 中操作文件,首先要
- 目录一、背景二、自动化的方案三、思路和知识点四、操作步骤4.1 初识 PyAutoGUI4.2 坐标系4.3 点击4.4 输入4.5 汉字输
- 1.多选按钮的方法以下为常用的方法:方法描述deselect()清除多选按钮选中选项。flash()在激活状态颜色和正常颜色之间闪烁几次多选
- 例子:(简 > 繁)面包 > 麵包 (zh-tw)寮国 > 老撾 (zh-hk)中国人寿 > 中國人壽 (zh-hk
- 这篇文章主要介绍了Python实现图片批量加入水印代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 书 名:细节决定交互设计的成败国际书号:ISBN 978-7-121-08232-0作 &nb
- 如下所示:import jsonimport http.clientconnection = http.client.HTTPSConnec
- 本文实例讲述了python实现Oracle查询分组的方法。分享给大家供大家参考,具体如下:1.分组的概念:关键字:group by子句结论:
- 前言人脸识别在LWF(Labeled Faces in the Wild)数据集上人脸识别率现在已经99.7%以上,这个识别率确实非常高了,
- 利用Python将多份excel表格整理成一份表格,抛弃过去逐份打开复制粘贴的方式。直接附上代码:import xlrd import xl