IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python 解压zip rar 7z文件 -> 正文阅读

[Python知识库]python 解压zip rar 7z文件

1、zip等格式文件解压文件

使用shutil,支持的压缩文件格式,一般常用解压格式为.zip文件。

import shutil

print(shutil.unpack_formats())

输出:

[('bztar', ['.tar.bz2', '.tbz2'], "bzip2'ed tar-file"), ('gztar', ['.tar.gz', '.tgz'], "gzip'ed tar-file"), ('tar', ['.tar'], 'uncompressed tar file'), ('xztar', ['.tar.xz', '.txz'], "xz'ed tar-file"), ('zip', ['.zip'], 'ZIP file')]

解压文件

extract_dir = "./tmp/"
shutil.unpack_archive(current_file, extract_dir)

2、删除临时文件

解压文件后需要删除临时文件

import os
os.remove(full_name)

3、shutil添加解压7z格式文件支持

import os
from py7zr import unpack_7zarchive
import shutil

if __name__ == "__main__":
    path = r"E:\Dataset\新建文件夹"
    suffix = ".zip"  # ".7z"  ".rar"
    # file_list = GetFiles(path, suffix)
    # print("there are ", len(file_list), "zip files")
    # file_list = GetFiles(path, suffix)
    # print("there are ", len(file_list), "rar files")
    shutil.register_unpack_format('7zip', ['.7z'], unpack_7zarchive)
    file_list = GetFiles(path, suffix)
    print("there are ", len(file_list), "7z files")
    current_file = file_list[0]
    print("current file ", current_file)
    extract_dir = "./tmp/"
    shutil.unpack_archive(current_file, extract_dir)

4、rar格式文件解压

安装 unrar 模块:

pip install rarfile
pip install unrar

下载 http://www.rarlab.com/rar/UnRARDLL.exe
安装后设置环境变量

在这里插入图片描述

测试

(pytorch190) C:\Users\wmz>python
Python 3.8.10 (default, May 19 2021, 13:12:57) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from unrar import rarfile

参考:解决Python下安装unrar后仍然提示Couldn’t find path to unrar library…
如果文件后缀名并不是文件的压缩格式,这就比较麻烦,比如后缀名为.rar的文件实际是.zip压缩格式。
这就需要判断文件的真实压缩格式,然后在做相应的处理。

import gzip
import os
import tarfile
import zipfile
from unrar import rarfile

def decompress_rar(src_file, dest_dir):
    """
    Decompress rar file into destination direction
    """
    rv = (True, '')

    try:
        rar = rarfile.RarFile(src_file)
        rar.extractall(dest_dir)
    except Exception as e:
        rv = (False, e)
        return rv

    return rv


def decompress_tar_and_tgz(src_file, dest_dir):
    """
    Decomporess .tar or .tgz file into destination directory
    """
    rv = (True, '')
    try:
        tar = tarfile.open(src_file)
        names = tar.getnames()
        for name in names:
            tar.extract(name, dest_dir)
        tar.close()
    except Exception as e:
        rv = (False, e)
        return rv

    return rv


def decompress_zip(src_file, dest_dir):
    """
    Decompress .zip file into destination folder
    """
    rv = (True, '')
    try:
        zip_file = zipfile.ZipFile(src_file)
        for name in zip_file.namelist():
            zip_file.extract(name, dest_dir)
        zip_file.close()
    except Exception as e:
        rv = (False, e)
        return rv
    
    return rv

def decompress_gz(src_file, dest_dir):
    """
    Decompress .gz file into destination folder
    """
    rv = (True, "")
    try:
        fname = dest_dir + '/' + os.path.basename(src_file)
        gfile = gzip.GzipFile(src_file)
        open(fname, "w+").write(gfile.read())
        gfile.close()
    except Exception as e:
        rv = (False, e)
        return rv

    return rv


def decompress(src_file, dest_dir):
    fname, ext = os.path.splitext(src_file)

    if ext in ('.tgz', '.tar'):
        decompress_tar_and_tgz(src_file, dest_dir)
    elif ext == '.zip':
        decompress_zip(src_file, dest_dir)        
    elif ext == '.rar':
        decompress_rar(src_file, dest_dir)
    elif ext == '.gz':
        decompress_gz(src_file, dest_dir)


def decompress_folder(src_dir):
    files = os.listdir(src_dir)

    for fname in files: # fname is file name with extension
        name, ext = os.path.splitext(fname) # name is file name without extension
        src_file = os.path.join(src_dir, fname)
        dest_path = os.path.join(src_dir, name)
        if not os.path.exists(dest_path):
            os.mkdir(dest_path)

        decompress(src_file, dest_path)
        print(src_file, 'was decompressed.')


if __name__ == '__main__':
    src_dir = r'D:\some_folder_name'
    decompress_folder(src_dir)

利用 winrar 软件进行解压

winrar 提供命令行解压,Python 语言可以调用 winrar 命令。在执行命令之前,把 winrar.exe 所在的路径加到环境变量。然后,比如,我们要把 D:\test 下所有 zip 文件解压,可以用下面的命令:

winrar.exe x D:\test\*.zip D:\test\unzip\

winrar 的命令行参数很多,这里不展开,x 表示使用绝对路径进行解压。Python 对 winrar 命令进行封装的代码如下:

import os

def unzip_folder(sourcepath):
    if sourcepath[-1:] == "\\":
        files = sourcepath + "*.zip"
    else:
        files = sourcepath + "\\" + "*.zip"

    dest = sourcepath + "\\unzip\\"

    cmd = 'WinRAR.exe x {} {}'.format(files, dest)
    os.system(cmd)  


if __name__ == "__main__":
    source_folder = r"D:\test\\"
    unzip_folder(source_folder)

参考:Python解压常见格式的压缩文件

5、zip和rar文件格式

根据文件头判断文件格式

参考:压缩包Zip格式详析(全网最详细)
参考:RAR文件格式学习(了解)

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-05-11 16:25:25  更:2022-05-11 16:25:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:29:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码