python 文件解压缩

2023-11-11

python 文件解压缩

# 使用的模块
import tarfile
import zipfile
import gzip
import rarfile
import lzma
import bz2

1. zip 解压

import zipfile
def decompress_zip(zip_path, dir_path):
    """
    zip 文件解压
    :param zip_path: zip 压缩包路径
    :param dir_path: 解压路径
    :return:
    """
    f = zipfile.ZipFile(zip_path, 'r')  # 压缩文件位置
    for file in f.namelist():
        f.extract(file, dir_path)  # 解压位置
    f.close()

2. zip 压缩

import os
import zipfile
def compression_zip(dir_path, out_put_zip_path):
    """
    压缩指定文件夹
    :param dir_path: 目标文件夹路径
    :param out_put_zip_path: 压缩文件保存路径+xxxx.zip
    :return: 无
    """
    # 目录切换
    os.chdir(dir_path)
    zip_ = zipfile.ZipFile(out_put_zip_path, "w", zipfile.ZIP_DEFLATED)  # outFullName为压缩文件的完整路径
    for path, dir_names, filenames in os.walk("./"):
        # 过滤 .git 文件夹
        new_root = path.replace("\\", "/")
        for filename in filenames:
            file_path = f"{new_root}/{filename}"
            if not os.path.exists(file_path):
                continue
            zip_.write(os.path.join(new_root, filename))
    zip_.close()


def compression_zip_files(file_list, out_put_zip_path):
    """
    压缩多个文件
    :param file_list: 目标文件列表路径
    :param out_put_zip_path: 压缩文件保存路径+xxxx.zip
    :return: 无
    """
    zip_ = zipfile.ZipFile(out_put_zip_path, "w", zipfile.ZIP_DEFLATED)  # outFullName为压缩文件的完整路径
    for file_name in file_list:
        if not os.path.exists(file_name):
            continue
        zip_.write(file_name)
    zip_.close()

3. tar 解压

import os
import tarfile
import shutil
def decompress_tar(tar_file_name, dir_name):
    """
    tar 文件解压
    :param tar_file_name: .tar 文件路径
    :param dir_name: 解压路径
    :return:
    """
    try:
        if not os.path.exists(tar_file_name):
            return False
        tar = tarfile.TarFile(tar_file_name)
        names = tar.getnames()
        print(names)
        if not os.path.exists(dir_name):
            os.mkdir(dir_name)
        else:
            shutil.rmtree(dir_name)
            os.mkdir(dir_name)
        for name in names:
            tar.extract(name, dir_name)
        tar.close()
        return True
    except Exception as e:
        print(f"文件tar 解压异常。{e} - {tar_file_name}")
    return False

4. tar 压缩

import os
import tarfile
def compression_tar_dir(dir_path, output_tar_path):
    """
    压缩文件夹
    只打包 .tar
    w: == w
    :param dir_path: 文件夹路径
    :param output_tar_path: 输出文件 .tar
    :return:
    """
    t = tarfile.open(output_tar_path, "w:")
    for root, dir, files in os.walk(dir_path):
        print(root, dir, files)
        for file in files:
            full_path = os.path.join(root, file)
            t.add(full_path)
    t.close()
def compression_tar_files(file_list, output_tar_path):
    """
    压缩多个文件
    只打包 .tar
    :param file_list: 文件列表路径
    :param output_tar_path: 输入文件 .tar
    :return:
    """
    t = tarfile.open(output_tar_path, "w:")
    for file in file_list:
        if not os.path.exists(file):
            continue
        t.add(file)
    t.close()

5. gz 解压

import gzip
def decompress_gz(gz_file_name, file_name):
    """
    gz 文件解压
    :param gz_file_name: gz 文件路径
    :param file_name: 解压后文件路径
    :return:
    """
    # 创建gzip 对象
    g_file_obj = gzip.GzipFile(gz_file_name, "rb")
    with open(file_name, "wb") as f:
        f.write(g_file_obj.read())
    # 关闭 gzip 对象
    g_file_obj.close()

6. gz 压缩

  • 注意:gz 压缩通常是对一个文件操作的,所以需要与其他工具模块一同使用。
  • 一般是tar 打包,gz压缩
import gzip
gz_file = gzip.GzipFile(filename="image.jpg",
           mode="wb", compresslevel=9, fileobj=open("C:\\test.gzip", "wb"))
"""
【参数说明】
	filename: 需要被压缩文件的名称
	mode:和普通文件的模式相同,读或写等,此时创建压缩文件,因此为写模式
	compresslevel: 压缩级别,取值为0~9,9为最大压缩比
	fileobj: 此处参数为压缩文件对象,其它可选为io.BytesIO对象,或其他类似文件对象
"""

def compression_gz(file_name, gz_file_name):
    """
    gz 文件压缩
    :param file_name:
    :param gz_file_name:
    :return:
    """
    # 创建gzip 对象
    g_file_obj = gzip.GzipFile(gz_file_name, "wb")
    with open(file_name, "rb") as f:
        g_file_obj.write(f.read())
    # 关闭 gzip 对象
    g_file_obj.close()

7. .tar.gz | .tgz 解压

8. .tar.gz | .tgz 压缩

import os
import tarfile
def compression_tar_dir_gz(dir_path, output_tar_path):
    """
    压缩文件夹
    w:gz 打包压缩 .tar.gz == .tgz
    :param dir_path: 文件夹路径
    :param output_tar_path: 输出文件 .tar
    :return:
    """
    t = tarfile.open(output_tar_path, "w:gz")
    for root, dir, files in os.walk(dir_path):
        print(root, dir, files)
        for file in files:
            full_path = os.path.join(root, file)
            t.add(full_path)
    t.close()

def compression_tar_files_gz(file_list, output_tar_path):
    """
    压缩多个文件
    打包压缩 .tar.gz
    :param file_list: 文件列表路径
    :param output_tar_path: 输入文件 .tar
    :return:
    """
    t = tarfile.open(output_tar_path, "w:gz")
    for file in file_list:
        if not os.path.exists(file):
            continue
        t.add(file)
    t.close()

9. .rar 压缩

10. .rar 解压

import os
import rarfile
def decompress_rar(rar_file_name, dir_name):
    """
    .rar 文件解压
    :param rar_file_name: rar 文件路径
    :param dir_name: 文件解压目录
    :return:
    """
    # 创建 rar 对象
    rar_obj = rarfile.RarFile(rar_file_name)
    # 目录切换
    if not os.path.exists(dir_name):
        os.mkdir(dir_name)
    os.chdir(dir_name)
    # Extract all files into current directory.
    rar_obj.extractall()
    # rar_obj.extractall(dir_name)
    # 关闭
    rar_obj.close()

11. .tar.xz 解压 --> tar 文件

import shutil
import lzma
def tar_xz_process(save_file_path):
   """.tar.xz 文件处理"""
   # xz 解压
   tar_file_path = save_file_path.replace(".tar.xz", ".tar")
   with lzma.open(save_file_path, "rb") as input_:
       with open(tar_file_path, "wb") as f:
           shutil.copyfileobj(input_, f)
   return tar_file_path

12. .xz 压缩 <-- 文件

import lzma
import shutil

input_file = "test_a.tar"
output_xz_file = "test_a.tar.xz"
with open(input_file, 'rb') as input_:
    with lzma.open(output_xz_file, 'wb') as output_:
        shutil.copyfileobj(input_, output_)

13. .tar.bz2 解压 --> tar 文件

import bz2
def tar_bz2_process(save_file_path):
   """.tar.bz2 文件处理"""
   tar_file_path = save_file_path.replace(".tar.bz2", ".tar")
   bz2_obj = bz2.BZ2File(save_file_path)
   with open(tar_file_path, "wb") as f:
       f.write(bz2_obj.read())
   bz2_obj.close()
   return tar_file_path

12. .tar.bz2 压缩 <-- tar 文件

示例脚本

链接:https://pan.baidu.com/s/1T2oBj2gJGx90mQZF5Y6C5A
提取码:25p1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 文件解压缩 的相关文章

  • 如何在 Windows 64 上安装 NumPy?

    NumPy 安装程序在注册表中找不到 python 路径 无法安装 需要 Python 2 5 版本 但在注册表中未找到该版本 OK 我必须修改注册表吗 我已经修改了 PATH 以指向Python25安装目录 我可以检查一下您使用的是什么安
  • 使用 matplotlib 从“列表列表”绘制 3D 曲面

    我已经搜索了一些 虽然我可以找到许多有用的网格网格示例 但没有一个清楚地表明我如何将列表列表中的数据转换为可接受的形式 以适应我所讨论的各种方式 当谈到 numpy matplotlib 以及我所看到的建议的术语和步骤顺序时 我有点迷失 我
  • 如何在Python中流式传输和操作大数据文件

    我有一个相对较大 1 GB 的文本文件 我想通过跨类别求和来减小其大小 Geography AgeGroup Gender Race Count County1 1 M 1 12 County1 2 M 1 3 County1 2 M 2
  • python 中的并行处理

    在 python 2 7 中进行并行处理的简单代码是什么 我在网上找到的所有示例都很复杂 并且包含不必要的代码 我该如何做一个简单的强力整数分解程序 在每个核心 4 上分解 1 个整数 我真正的程序可能只需要2个核心 并且需要共享信息 我知
  • 保留完整姓氏,在 pandas 列中获取名字的首字母(如果有的话,还有中间名)

    我有一个 pandas 数据框 其中有一列表示几位网球运动员的姓氏和姓名 如下所示 Player 0 Roddick Andy 1 Federer Roger 2 Tsonga Jo Wilfred 我想保留完整的姓氏并获取姓名的首字母和中
  • 没有名为 StringIO 的模块

    我有Python 3 6 我想从另一个名为 run py 的 python 文件执行名为 operation py 的 python 文件 In operation py I do from cStringIO import StringI
  • 在 Django OAuth Toolkit 中安全创建新应用程序

    如何将 IsAdminUser 权限添加到 Django OAuth Toolkit 中的 o applications 视图 REST FRAMEWORK DEFAULT PERMISSION CLASSES rest framework
  • 从扫描文档中提取行表 opencv python

    我想从扫描的表中提取信息并将其存储为 csv 现在我的表提取算法执行以下步骤 应用倾斜校正 应用高斯滤波器进行去噪 使用 Otsu 阈值进行二值化 进行形态学开局 Canny 边缘检测 进行霍夫变换以获得表格行 去除重复行 10像素范围内相
  • Python新式类和__subclasses__函数

    有人可以向我解释为什么这有效 在 Python 2 5 中 class Foo object pass class Bar Foo pass print Foo subclasses 但这不是 class Foo pass class Ba
  • 在 Windows 上使用 apache mod_wsgi 运行 Flask 应用程序时导入冲突

    我允许您询问我在 Windows 上使用您的 mod wsgi portage 托管 Flask 应用程序时遇到的问题 我有两个烧瓶应用程序 由于导入冲突 只有一个可以同时存在 IE 如果请求申请 1 我有回复 然后 如果我请求应用程序 2
  • 使用 python 绘制正值小提琴图

    我发现小提琴图信息丰富且有用 我使用 python 库 seaborn 然而 当应用于正值时 它们几乎总是在低端显示负值 我发现这确实具有误导性 尤其是在处理现实数据集时 在seaborn的官方文档中https seaborn pydata
  • Tensorflow 与 Keras 的兼容性

    我正在使用 Python 3 6 和 Tensorflow 2 0 并且有一些 Keras 代码 import keras from keras models import Sequential from keras layers impo
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • Anaconda 无法导入 ssl 但 Python 可以

    Anaconda 3 Jupyter笔记本无法导入ssl 但使用Atom终端导入ssl没有问题 我尝试在 Jupyter 笔记本中导入 ssl 但出现以下错误 C ProgramData Anaconda3 lib ssl py in
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • 动态过滤 pandas 数据框

    我正在尝试使用三列的阈值来过滤 pandas 数据框 import pandas as pd df pd DataFrame A 6 2 10 5 3 B 2 5 3 2 6 C 5 2 1 8 2 df df loc df A gt 0
  • 当数据库不是 Django 模型时,是否可以使用数据库中的表?

    是否可以从应用程序数据库中的表获取查询集 该表不是应用程序中的模型 如果我有一个不是名为 cartable 的模型的表 从概念上讲 我想这样做 myqueryset cartable objects all 有没有相对简单的方法来做到这一点
  • Elasticsearch 通过搜索返回拼音标记

    我用语音分析插件 https www elastic co guide en elasticsearch plugins current analysis phonetic html由于语音转换 从弹性搜索中进行一些字符串匹配 我的问题是
  • 如何根据第一列创建新列,同时考虑Python Pandas中字母和列表的大小? [复制]

    这个问题在这里已经有答案了 我在 Python Pandas 中有 DataFrame 如下所示 col1 John Simon prd agc Ann White BeN and Ann bad list Ben Wayne 我需要这样做
  • 从 pandas DataFrame 中删除少于 K 个连续 NaN

    我正在处理时间序列数据 我在从数据帧列中删除小于或等于阈值的连续 NaN 时遇到问题 我尝试查看一些链接 例如 标识连续 NaN 出现的位置以及计数 Pandas NaN 孔的游程长度 https stackoverflow com que

随机推荐

  • 【操作系统】王道考研 p58 磁盘调度算法

    磁盘调度算法 一些寻道的图来自 操作系统 磁盘调度算法 知识总览 一次磁盘读 写操作需要的时间 先来先服务算法 FCFS First Come First Service 很菜的算法 菜在它很容易来来回回 如 最短寻找时间优先算法 SSTF
  • Spring cloud项目搭建----Feign(七)

    开发的时候在想如果自己做项目经理 如何从零搭建一套框架呢 就着手实践和记录了一下 本篇开始介绍一下Feign的使用 1 创建一个maven项目 example api 这个项目是一个公用的feign接口module 会以jar包的形式引入其
  • 高斯—赛德尔迭代法解线性方程组(C语言)

    高斯 赛德尔迭代法解线性方程组 参考教材 数值分析 李乃成 梅立泉 科学出版社 计算方法教程 第二版 凌永祥 陈明逵 include
  • [CMake教程] 循环

    目录 一 foreach 二 while 三 break 与 continue 作为一个编程语言 CMake也少不了循环流程控制 他提供两种循环foreach 和 while 一 foreach 基本语法 foreach
  • 我想打老板,作为Java后端程序员,他让我开发电商微信小程序

    大家好 我是曹NM 我是一名Java后端程序员 每天开心的撸CRUD 然后 今天突变 今天早上老板把我叫到办公室 对我说 公司最近接了个电商小程序单子 你和王二狗 张SD参与下需求分析和设计 然后下个月开发 3个月内完成测试 上线交付 WC
  • 能通过一张照片(2D)得到3D的模型吗?AI自动识别户型图生成3D场景方案

    参考文献 基于形状与边缘特征的户型图识别研究 江州 caj 面向自动家装生成的户型图识别方法研究 黄文 caj 基于深度学习的青年公寓户型自动生成研究 杨柳 caj 基于结构构件识别的户型图三维重建算法研究 朱俊芳 caj 基于OpenCV
  • 使用mimikatz获取和创建Windows凭据的工具和方法

    Mimikatz 下载地址 https github com gentilkiwi mimikatz releases 本地凭据破解 以管理员身份运行 拿到shell提权后 mimikatz privilege debug 测试是否OK 正
  • 总结---第一次参加蓝桥杯竞赛

    第一次蓝桥杯经验总结 2019年3月24日这一天 我第一次参加了较为正式的线下赛 蓝桥杯 参赛地点再长沙理工大学 第一次参赛 没有任何经验 而且才刚步入大一半学期 知识储备也很少 这次比赛我是抱着开眼界 试试水的心态来参加的 但在赛前还是有
  • 程序员怎样才能实现财富自由

    一 简介 本文我们就来聊聊程序员如何实现财富自由 以下文章内容只是我自己的观点 如果大家有什么别的看法 可以在评论区一起讨论 二 开门见山 我认为首先要有过硬的技术底子 尤其是在实践能力上 最好是理论与实践的相结合起来 假如一个程序员23岁
  • gta5老是变成单人战局_游戏奇葩反作弊,让玩家变成一只猫,变回人形后怀念起猫咪的生活...

    随着游戏行业不断的发展 现在的游戏越来越优秀了 但是与之相应的作弊外挂也是越来越严重 不少游戏 虽然全球风靡 但是面对外挂依旧有心无力 其中GTA5作为一款非常优秀的游戏 虽然已经是几年时间了 但是依旧有不少玩家热爱 最近GTA5大型DLC
  • 封装Logger日志工具类

    一般情况下我们通过 slf4j注解即可实现打印日志 但是实际工作中 我们可能需要在打印日志的同时处理其他逻辑 比如 出现error日志时要同时上报Sentry 我们虽然可以这样写 lg error e getMessage e Sentry
  • Transformers训练和微调:Training and Fine-tuning

    Transformers种的模型类旨在兼容Pytorch和Tensorflow2 并且可以无缝地在其中使用 本节 会展示如何使用标准的训练工具从头开始训练或微调一个模型 此外 也会展示如何使用Trainer 类来处理复杂的训练过程 使用Py
  • 数据倾斜3

    前言 相信很多接触MapReduce的朋友对 数据倾斜 这四个字并不陌生 那么究竟什么是数据倾斜 又该怎样解决这种该死的情况呢 何为数据倾斜 在弄清什么是数据倾斜之前 我想让大家看看数据分布的概念 正常的数据分布理论上都是倾斜的 就是我们所
  • 【Spring自带工具类】

    断言 断言是一个逻辑判断 用于检查不应该发生的情况 Assert 关键字在 JDK1 4 中引入 可通过 JVM 参数 enableassertions开启 SpringBoot 中提供了 Assert 断言工具类 通常用于数据合法性检查
  • ElasticSearch第十四讲 ES有条件复杂查询

    模糊匹配 模糊匹配主要是针对文本类型的字段 文本类型的字段会对内容进行分词 对查询时 也会对搜索条件进行分词 然后通过倒排索引查找到匹配的数据 模糊匹配主要通过match等参数来实现 match 通过match关键词模糊匹配条件内容 pre
  • 【单片机毕业设计】【mcuclub-dz-058】基于单片机的智能水杯控制系统

    最近设计了一个项目基于单片机的智能水杯控制系统 与大家分享一下 一 基本介绍 项目名 智能水杯 单片机 STC89C52 项目编号 mcuclub dz 058 功能简介 1 通过防水式DS18B20测水温 当水温低于设置最小值 进行加热直
  • elasticsearch 设置使用磁盘上限百分比

    设置 elasticsearch 磁盘上限 避免磁盘空间达到80 出现数据大批量转移 或 多节点磁盘空不足导致故障 PUT cluster settings transient cluster routing allocation disk
  • egg.js 路径别名配置 module-alias

    安装依赖 moudle alias npm install module alias save 配置package json文件 注 这里 root就是别名 后面引号内的内容就是原路径 moduleAliases root app app
  • N-Gram语言模型工具kenlm的详细安装教程

    本配置过程基于Linux系统 下载源代码 wget O https kheafield com code kenlm tar gz tar xz 编译 makdir kenlm build cd kenlm build cmake make
  • python 文件解压缩

    文章目录 python 文件解压缩 1 zip 解压 2 zip 压缩 3 tar 解压 4 tar 压缩 5 gz 解压 6 gz 压缩 7 tar gz tgz 解压 8 tar gz tgz 压缩 9 rar 压缩 10 rar 解压