使用Python3解压如下五种压缩文件:gz、tar、tgz、zip、rar

简介

gz: 即gzip,通常只能压缩一个文件。与tar结合起来就可以实现先打包,再压缩。

tar: linux系统下的打包工具,只打包,不压缩

tgz:即tar.gz。先用tar打包,然后再用gz压缩得到的文件

zip: 不同于gzip,虽然使用相似的算法,可以打包压缩多个文件,不过分别压缩文件,压缩率低于tar。

rar:打包压缩文件,最初用于DOS,基于window操作系统。压缩率比zip高,但速度慢,随机访问的速度也慢。

例子

import gzip
import os
import tarfile , zipfile, rarfile from library.utils.file import get_filetype
from library.utils.path import make_dir
from library.utils.type_conv import random_str def uncompress(src_file, dest_dir):
result = get_filetype(src_file)
if not result[0] :
return (False, result[1], '')
filefmt = result[1] result = make_dir(dest_dir)
if not result :
return (False, '创建解压目录失败', filefmt) if filefmt in ('tgz', 'tar') :
try :
tar = tarfile.open(src_file)
names = tar.getnames()
for name in names:
tar.extract(name, dest_dir)
tar.close()
except Exception as e :
return (False, e, filefmt)
elif filefmt == 'zip':
try :
zip_file = zipfile.ZipFile(src_file)
for names in zip_file.namelist():
zip_file.extract(names, dest_dir)
zip_file.close()
except Exception as e :
return (False, e, filefmt)
elif filefmt == 'rar' :
try :
rar = rarfile.RarFile(src_file)
os.chdir(dest_dir)
rar.extractall()
rar.close()
except Exception as e :
return (False, e, filefmt)
elif filefmt == 'gz' :
try : f_name = dest_dir + '/' + os.path.basename(src_file)
# 获取文件的名称,去掉
g_file = gzip.GzipFile(src_file)
# 创建gzip对象
open(f_name, "w+").write(g_file.read())
# gzip对象用read()打开后,写入open()建立的文件中。
g_file.close()
# 关闭gzip对象 result = get_filetype(src_file)
if not result[0] :
new_filefmt = '未知'
else :
new_filefmt = result[1]
return (True, '解压后的文件格式为:' + new_filefmt, filefmt)
except Exception as e :
return (False, e, filefmt)
else :
return (False, '文件格式不支持或者不是压缩文件', filefmt) return (True, '', filefmt)

使用Python3解压gz、tar、tgz、zip、rar五种格式的压缩文件例子的更多相关文章

  1. linux下 zip解压 tar解压 gz解压 bz2等各种解压文件命令

    .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ——————————————— .gz 解压 ...

  2. *.tar 用 tar –xvf 解压 *.gz 用 gzip -d或者gunzip 解压 *.tar.gz和*.tgz 用 tar –xzf 解压 *.bz2 用 bzip2 -d或者用bunzip2 解压 、*.tar.bz2用tar –xjf 解压

    解压: 1.*.tar 用 tar –xvf 解压, --skip-old-files跳过已经存在的文件,压缩用tar -cvf 2.*.bz2 用 bzip2 -d或者用bunzip2 解压 3.* ...

  3. linux下 tar解压 gz解压 bz2等各种解压文件使用方法

    http://alex09.iteye.com/blog/647128 大致总结了一下linux下各种格式的压缩包的压缩.解压方法. .tar 解包:tar xvf FileName.tar 打包:t ...

  4. CentOS下tar解压 gz解压 bz2等各种解压文件使用方法

    .tar  解包:tar xvf FileName.tar  打包:tar cvf FileName.tar DirName  (注:tar是打包,不是压缩!)  ———————————————  . ...

  5. 如何解压POSIX tar archive文件

    下载了一个xxx.gz的文件,使用x xxx.gz(zsh的x插件,十分之好用,再也不用担心tar后面该加哪些参数了)的命令解压,然后出现了一个文件,本以为解压后是一个文件夹:然后一脸蒙逼~ 突然又想 ...

  6. 解压上传的zip文件流和文件

    /** * 解压上传的zip文件流 * @param stream * @param outputDirectory */ public static String unzip(InputStream ...

  7. 【linux】安装rar,并解压被压缩成多个rar的文件

    rar  官网:http://www.rarsoft.com/download.htm 选择  RAR for  linux   (注意你的系统是32位还是64位) 1 安装命令: $ cd /roo ...

  8. Linux学习之CentOS(十九)------linux 下压缩与解压之 tar、gzip、bzip2、zip、rar

    将文件存储到归档文件中或者从归档文件中获取原始文件,以及为文件创建归档文件 tar [option] [modifiers] [file-list] 参数 file-list是tar进行归档和提取的文 ...

  9. linux下如何打包压缩?解包解压?.tar文件.gz文件

    ===文件打包.压缩 ==打包 tar [root@521478.com]# tar -cvf etc1.tar /etc //c创建 v详细 f打包后文件名 [root@521478.com]# t ...

随机推荐

  1. 【bzoj4870】[Shoi2017]组合数问题 dp+快速幂/矩阵乘法

    题目描述 输入 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 输出 一行一个整数 ...

  2. 【Luogu】P3288方伯伯运椰子(消圈定理)

    题目链接 分数规划题,详见luogu题解 #include<cstdio> #include<cstring> #include<cctype> #include& ...

  3. 关于spark RDD trans action算子、lineage、宽窄依赖详解

    这篇文章想从spark当初设计时为何提出RDD概念,相对于hadoop,RDD真的能给spark带来何等优势.之前本想开篇是想总体介绍spark,以及环境搭建过程,但个人感觉RDD更为重要 铺垫 在h ...

  4. 设置RobotFramework的ftplibrary中,将Upload_file操作的异常改为回显错误信息。

    测试中需要通过FTP通道,将数据发送给服务器,而这个上传的数据要被阻断.在结合RobotFramework测试中,安装的ftplibrary,使用upload_file操作,如果上传动作失败,会抛出异 ...

  5. oracle修改数据遇到的坑

    select t.*,mt.*,mr.rowid,mr.* from manu_routecardlist mr left join manu_routecard t on t.routecard_i ...

  6. reduce实现数组求和

    对于实现数组求和,我们常用的思路是通过for.while,对数组进行迭代,依次将他们的值加起来,下面列举常用的两种方法 第一种: var arr = [1,2,3,4,5,6]; Array.prot ...

  7. Nano

    Nano命令指南 今天在输命令时,无意中输入了nano,对这个命令不太熟悉,结果不知道如何才能退出,保存,赶快查了一下资料,原来是这样的啊. 打开文件与新建文件 使用nano打开或新建文件,只需键入: ...

  8. js执行时间(调试)

    js 执行时间 function use_time(func) {    var start = new Date().getTime(); console.log(start);        fu ...

  9. YUY格式

    YUV格式有两大类:planar和packed. 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V. 对于packed的YUV格式,每个像素点的Y ...

  10. OpenCV 2.4.9 学习笔记(1)—— 基本功能结构

    一些关于OpenCV(2.4.9版本)的学习笔记,作为记录,以免自己忘了. 安装与配置 OpenCV的下载.安装以及在各个平台(Windows/Linux等)配置网上有很多的资料,自己就不用存了.需要 ...