Python3,9行代码进行压缩和解压缩,从此告别压缩软件(二)。

举报
Carl_奕然 发表于 2023/05/09 15:08:26 2023/05/09
【摘要】 网友:别的不用,只把7Z 学会进行了。

2.3 tar.gz文件

接上一篇《Python3,9行代码进行压缩和解压缩,从此告别压缩软件(一)》


2.3.1 基本信息


tarfile 模块可以用来读写 tar 归档,包括使用 gzip, bz2 和 lzma 压缩的归档。
在使用tarfile是必须了解模式:

mode 必须是 ‘filemode[:compression]’ 形式的字符串,其默认值为 ‘r’,详细参照下表:


针对特殊的目的,还存在第二种 mode 格式: ‘filemode|[compression]’。
tarfile.open() 将返回一个将其数据作为数据块流来处理的 TarFile 对象:


2.3.2 代码示例


代码示例

# -*- coding:utf-8 -*-
# @Time   : 2022-04-05
# @Author : carl_DJ


import os
import tarfile
import gzip

'''
tar.gz文件  压缩和解压缩
'''

# 一次性打包整个根目录。空子目录会被打包。
# 如果只打包不压缩,将"w:gz"参数改为"w:"或"w"即可。
def make_targz(output_filename, source_dir):
    with tarfile.open(output_filename, "w:gz") as tar:
        tar.add(source_dir, arcname=os.path.basename(source_dir))


# 逐个添加文件打包,未打包空子目录。可过滤文件。
# 如果只打包不压缩,将"w:gz"参数改为"w:"或"w"即可。
def make_targz_one_by_one(output_filename, source_dir):
    tar = tarfile.open(output_filename, "w:gz")
    for root, dir, files in os.walk(source_dir):
        for file in files:
            pathfile = os.path.join(root, file)
            tar.add(pathfile)
    tar.close()

#解压缩gz文件
def decompression_gz(file_name):
    
    f_name = file_name.replace(".gz", "")
    # 获取文件的名称,去掉
    g_file = gzip.GzipFile(file_name)
    # 创建gzip对象
    open(f_name, "wb+").write(g_file.read())
    # gzip对象用read()打开后,写入open()建立的文件里。
    g_file.close()  # 关闭gzip对象


def decompression_tar(file_name):
    # untar zip file
    tar = tarfile.open(file_name)
    names = tar.getnames()
    if os.path.isdir(file_name + "_files"):
        pass
    else:
        os.mkdir(file_name + "_files")
    # 由于解压后是许多文件,预先建立同名文件夹
    for name in names:
        tar.extract(name, file_name + "_files/")
    tar.close()


if __name__ == '__main__':
    make_targz('test.tar.gz', "D:")
    make_targz_one_by_one('test01.tgz', "D:\phps_pro")
    decompression_tar("demo_test.tar")
    decompression_gz("demo_test.tar.gz")


    

2.4 7z文件


要压缩和解压缩.7z文件需要用到py7zr组件。

代码示例

# -*- coding:utf-8 -*-
# @Time   : 2022-04-05
# @Author : carl_DJ

import py7zr

'''压缩7z'''
with py7zr.SevenZipFile("Archive.7z", 'r') as archive:
    archive.extractall(path="/tmp")

'''解压缩7z'''
with py7zr.SevenZipFile("Archive.7z", 'w') as archive:
    archive.writeall("target/")


    
3、总结


今天的分享,就到这里了。
奇奇怪怪的知识,又增加了。
以后是不是就不用再去下载第三方的压缩软件了,
直接执行个代码就OK了。

我是小鱼:

  • CSDN 博客专家;
  • 阿里云 专家博主;
  • 51CTO 博客专家;
  • 51认证讲师;
  • 金牌面试官;
  • 职业规划师

关注我,带你学习更多更有趣的Python知识。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。