Python使用tarfile模块实现免费压缩解压

 更新时间:2024年03月22日 09:51:55   作者:景天科技苑  
Python自带的tarfile模块可以方便读取tar归档文件,厉害的是可以处理使用gzip和bz2压缩归档文件tar.gz和tar.bz2,这篇文章主要介绍了Python使用tarfile模块实现免费压缩解压,需要的朋友可以参考下

tarfile 压缩模块

Python自带的tarfile模块可以方便读取tar归档文件,厉害的是可以处理使用gzip和bz2压缩归档文件tar.gz和tar.bz2。
与tarfile对应的是zipfile模块,zipfile是处理zip压缩的。
zipfile使用的是gzip格式压缩,但是tarfile可以使用压缩效率更好的bz2格式
请注意:os.system(cmd)可以使Python脚本执行命令,当然包括:tar -czf *.tar.gz *,tar -xzf *.tar.gz,unzip等,也可以解决问题。

压缩模块-tarfile(后缀为.tar | .tar.gz | .tar.bz2)
#bz2模式的压缩文件较小 根据电脑的不同会差生不同的结果 (理论上:bz2压缩之后更小,按实际情况为标准)

w 单纯的套一个后缀 打包
w:bz2 采用bz2算法 压缩
w:gz 采用gz算法 压缩

tarfile的语法格式

(1)打开/创建压缩包

tarfile.open(name=None, mode=‘r’, fileobj=None, bufsize=10240, **kwargs)
mode:文件打开模式,默认为‘r’;tarfile模块的打开模式有如下:

(2)压缩文件

#1.open(‘路径包名’,‘模式’,‘字符编码’) 创建或者打开文件
#2.add(路径文件,arcname=“别名”) 向压缩文件中添加文件
#3,close() 关闭文件

(3)解压文件

#1.open(‘路径包名’,‘模式’,‘字符编码’) 读模式打开文件
#2.extractall(路径) 解压所有文件到某个路径下
#extract(文件,路径) 解压指定的某个文件到某个路径下
#3.close() 关闭压缩文件

(4)追加文件

open() 追加模式 a: 打开压缩文件 正常添加即可

(5)查看压缩包中的内容

getnames()

import tarfile
# (1) 压缩文件
# 1.只是单纯的打包.
# 创建压缩包
tf = tarfile.open("ceshi0930_0.tar","w",encoding="utf-8")
# 写入文件
"""add(路径,别名)"""
tf.add("/bin/chown","chown")
tf.add("/bin/cp","cp")
tf.add("/bin/dash","tmp/dash")
# 关闭文件
tf.close() # 378880
# 2.使用gz算法压缩
tf = tarfile.open("ceshi0930_1.tar.gz","w:gz",encoding="utf-8")
# 写入文件
"""add(路径,别名)"""
tf.add("/bin/chown","chown")
tf.add("/bin/cp","cp")
tf.add("/bin/dash","tmp/dash")
# 关闭文件
tf.close() # 180413
# 3.使用bz2算法压缩
tf = tarfile.open("ceshi0930_2.tar.bz2","w:bz2",encoding="utf-8")
# 写入文件
"""add(路径,别名)"""
tf.add("/bin/chown","chown")
tf.add("/bin/cp","cp")
tf.add("/bin/dash","tmp/dash")
# 关闭文件
tf.close() # 163261

#(2) 解压文件

tf = tarfile.open(“ceshi0930_1.tar.gz”,“r”,encoding=“utf-8”)
“”" extract(文件,路径) 解压单个文件"“”
tf.extract(“chown”,“ceshi0930_1”)
“”" extract(路径) 解压所有文件"“”
tf.extractall(“ceshi0930_1_2”)
tf.close()

解压单个文件,第一个参数压缩文件别名,第二个是要解压到的路径

解压全部文件

#(3) 追加文件
对已经压缩过的包无法进行追加文件,只能是没有压缩过的包进行追加文件
针对已存在的压缩包,w追加的话,是把原来的文件给替换了,压缩包只剩下最后一次追加的文件. 使用a模式,追加已存在的压缩包,报错
如果第一次使用a模式,可以一直使用a模式追加
也就是只能追加没压缩过的包

tf = tarfile.open(“ceshi0930_0.tar”,“a”,encoding=“utf-8”)
tf.add(“/bin/mkdir”,“mkdir”)
tf.close()

使用w模式,是覆盖

解压后,只剩下一个

是用a模式,原压缩文件存在的话,报错

第一次使用a模式打包的,可以一直用a模式追加

使用with进行改造

with tarfile.open(“ceshi0930_0.tar”,“a”,encoding=“utf-8”) as tf:
tf.add(“/bin/mkdir”,“mkdir234”)

#(4) 查看文件,返回的是个列表

with tarfile.open(“ceshi0930_0.tar”,“r”,encoding=“utf-8”) as tf:
lst = tf.getnames()
print(lst)

####追加文件到压缩包中在压缩

import os,shutil
"""
1.把已经压缩的包进行解压
2.把要追加的内容放进去
3.过滤文件重新压缩
"""
# 记录压缩包所在的绝对路径
pathvar1 = os.path.abspath("ceshi0930_2.tar.bz2")
# 要解压到哪个文件夹中(绝对路径)
pathvar2 = os.path.join(  os.getcwd() , "ceshi0930_2"  )
print(pathvar1)# /mnt/hgfs/python32_gx/day16/ceshi0930_2.tar.bz2
print(pathvar2)# /mnt/hgfs/python32_gx/day16/ceshi0930_2
# 1.把已经压缩的包进行解压
with tarfile.open(pathvar1,"r",encoding="utf-8") as tf:
    tf.extractall(pathvar2)
# 2.把要追加的内容放进去
shutil.copy("/bin/echo" , pathvar2)
# 3.过滤文件重新压缩
# 查看文件夹当中有什么文件
lst = os.listdir(pathvar2)
print(lst) # ['chown', 'cp', 'echo', 'tmp']
with tarfile.open(pathvar1,"w:bz2",encoding="utf-8") as tf:
    for i in lst:
        if i != "chown":
            # 拼凑成完整的绝对路径
            abs_path = os.path.join(pathvar2,i)
            # 剩下的都要压缩
            """add(路径,别名)"""
            tf.add(abs_path,i)

到此这篇关于Python使用tarfile模块实现免费压缩解压的文章就介绍到这了,更多相关Python压缩解压内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python疫情数据可视化分析

    Python疫情数据可视化分析

    这篇文章主要介绍了Python疫情数据可视化分析,本数据集主要涉及到全球疫情统计,包括确诊、治愈、死亡、时间、国家、地区等信息,需要的朋友可以参考一下
    2022-07-07
  • pygame游戏之旅 游戏中添加显示文字

    pygame游戏之旅 游戏中添加显示文字

    这篇文章主要为大家详细介绍了pygame游戏之旅的第5篇,教大家如何在游戏中添加显示文字,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • python使用form-data形式上传文件请求的方法

    python使用form-data形式上传文件请求的方法

    Python中的multipart/form-data是一种HTTP POST请求的数据格式,用于上传文件或二进制数据,下面这篇文章主要给大家介绍了关于python使用form-data形式上传文件请求的相关资料,需要的朋友可以参考下
    2023-04-04
  • Python网络编程之ZeroMQ知识总结

    Python网络编程之ZeroMQ知识总结

    这篇文章主要介绍了Python网络编程之ZeroMQ知识总结,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • 在Python的Django框架中用流响应生成CSV文件的教程

    在Python的Django框架中用流响应生成CSV文件的教程

    这篇文章主要介绍了在Python的Django框架中用流响应生成CSV文件的教程,作者特别讲到了防止CSV文件中的中文避免出现乱码等问题,需要的朋友可以参考下
    2015-05-05
  • python Tkinter是什么

    python Tkinter是什么

    大家好,本篇文章主要讲的是 python Tkinter是什么,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Python实现APP自动化发微信群消息的示例代码

    Python实现APP自动化发微信群消息的示例代码

    本文主要介绍了Python实现APP自动化发微信群消息的示例代,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下码
    2022-01-01
  • 使用celery和Django处理异步任务的流程分析

    使用celery和Django处理异步任务的流程分析

    Celery是 一个专注于实时处理的任务队列,它还支持任务调度。 Celery快速,简单,高度可用且灵活。这篇文章主要介绍了使用celery和Django处理异步任务的流程分析,需要的朋友可以参考下
    2020-02-02
  • Python绘制可以表示点密度的散点图得方法

    Python绘制可以表示点密度的散点图得方法

    本文介绍基于Python语言的matplotlib模块,对Excel表格文件中的指定数据,加以密度散点图绘制的方法,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-05-05
  • Python Pandas模块实现数据的统计分析的方法

    Python Pandas模块实现数据的统计分析的方法

    在上一篇讲了几个常用的“Pandas”函数之后,今天小编就为大家介绍一下在数据统计分析当中经常用到的“Pandas”函数方法,希望能对大家有所收获,需要的朋友可以参考下
    2021-06-06

最新评论