-
2021-05-09 08:18:36
这里讨论使用Python解压如下五种压缩文件:
.gz .tar .tgz .zip .rar
简介gz: 即gzip,通常只能压缩一个文件。与tar结合起来就可以实现先打包,再压缩。
tar: linux系统下的打包工具,只打包,不压缩
tgz:即tar.gz。先用tar打包,然后再用gz压缩得到的文件
zip: 不同于gzip,虽然使用相似的算法,可以打包压缩多个文件,不过分别压缩文件,压缩率低于tar。
rar:打包压缩文件,最初用于DOS,基于window操作系统。压缩率比zip高,但速度慢,随机访问的速度也慢。
关于zip于rar之间的各种比较,可见:
http://www.comicer.com/stronghorse/water/software/ziprar.htm
gz由于gz一般只压缩一个文件,所有常与其他打包工具一起工作。比如可以先用tar打包为XXX.tar,然后在压缩为XXX.tar.gz
解压gz,其实就是读出其中的单一文件,Python方法如下:
[python] view plain copyimport gzip import os def un_gz(file_name):
"""ungz zip file"""
f_name = file_name.replace(".gz", "")
#获取文件的名称,去掉
g_file = gzip.GzipFile(file_name)
#创建gzip对象
open(f_name, "w+").write(g_file.read())
#gzip对象用read()打开后,写入open()建立的文件中。
g_file.close()
#关闭gzip对象
tarXXX.tar.gz解压后得到XXX.tar,还要进一步解压出来。
*注:tgz与tar.gz是相同的格式,老版本DOS扩展名最多三个字符,故用tgz表示。
由于这里有多个文件,我们先读取所有文件名,然后解压,如下:
[python] view plain copyimport tarfile def un_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()
*注:tgz文件与tar文件相同的解压方法。
zip与tar类似,先读取多个文件名,然后解压,如下:
[python] view plain copyimport zipfile def un_zip(file_name):
"""unzip zip file"""
zip_file = zipfile.ZipFile(file_name)
if os.path.isdir(file_name + "_files"):
pass
else:
os.mkdir(file_name + "_files")
for names in zip_file.namelist():
zip_file.extract(names,file_name + "_files/")
zip_file.close()
rar因为rar通常为window下使用,需要额外的Python包rarfile。
可用地址: http://sourceforge.net/projects/rarfile.berlios/files/rarfile-2.4.tar.gz/download
解压到Python安装目录的/Scripts/目录下,在当前窗口打开命令行,
输入Python setup.py install
安装完成。
[python] view plain copyimport rarfile import os def un_rar(file_name):
"""unrar zip file"""
rar = rarfile.RarFile(file_name)
if os.path.isdir(file_name + "_files"):
pass
else:
os.mkdir(file_name + "_files")
os.chdir(file_name + "_files"):
rar.extractall()
rar.close()
tar打包在写打包代码的过程中,使用tar.add()增加文件时,会把文件本身的路径也加进去,加上arcname就能根据自己的命名规则将文件加入tar包打包代码:
!/usr/bin/env /usr/local/bin/python
# encoding: utf-8 import tarfile import os import time
start = time.time() tar=tarfile.open('/path/to/your.tar,'w') for root,dir,files in os.walk('/path/to/dir/'):
for file in files:
fullpath=os.path.join(root,file)
tar.add(fullpath,arcname=file)
tar.close() print time.time()-start
在打包的过程中可以设置压缩规则,如想要以gz压缩的格式打包tar=tarfile.open('/path/to/your.tar.gz','w:gz')其他格式如下表:tarfile.open的mode有很多种:mode action'r' or 'r:*' Open for reading with transparent compression (recommended).'r:' Open for reading exclusively without compression.'r:gz' Open for reading with gzip compression.'r:bz2' Open for reading with bzip2 compression.'a' or 'a:' Open for appending with no compression. The file is created if it does not exist.'w' or 'w:' Open for uncompressed writing.'w:gz' Open for gzip compressed writing.'w:bz2' Open for bzip2 compressed writing.
tar解包tar解包也可以根据不同压缩格式来解压。
!/usr/bin/env /usr/local/bin/python
# encoding: utf-8 import tarfile import time
start = time.time() t = tarfile.open("/path/to/your.tar", "r:") t.extractall(path = '/path/to/extractdir/') t.close() print time.time()-start
上面的代码是解压所有的,也可以挨个起做不同的处理,但要如果tar包内文件过多,小心内存哦~tar = tarfile.open(filename, 'r:gz') for tar_info in tar:
file = tar.extractfile(tar_info)
do_something_with(file)
更多相关内容 -
用7z命令压缩多个文件夹和文件
2020-11-10 11:53:36《用7z命令压缩文件夹》 https://blog.csdn.net/cpdoor2163_com/article/details/109580529 修改出新的压缩命令,CompressCommand2.bat,的内容: :: For compress, set source folder, target folder and target ...压缩目标:
文件夹:Folder1
文件:Folder2\Folder2_File2.txt
文件夹:Folder3参考之前的文章:
《用7z命令压缩文件夹》
https://blog.csdn.net/cpdoor2163_com/article/details/109580529修改出新的压缩命令,CompressCommand2.bat,的内容:
:: For compress, set source folder, target folder and target file name
set sourceFolderPath1=D:\cpWorkZone\Practice\CompressCommand\SourceFolder
set targetFolderPath1=D:\cpWorkZone\Practice\CompressCommand\BackupFolder
set targetFileName1=SourceFolder:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set currentTimeString1=%date:~0,4%-%date:~5,2%-%date:~8,2%_%time:~0,2%_%time:~3,2%_%time:~6,2%
set targetFilePath1=%targetFolderPath1%\%targetFileName1%_%currentTimeString1%.7z
:: echo %targetFilePath1%7z.exe.lnk a -t7z %targetFilePath1% %sourceFolderPath1%\Folder1 %sourceFolderPath1%\Folder2\Folder2_File2.txt %sourceFolderPath1%\Folder3
pause
压缩完成,生成SourceFolder_2020-11-10_11_15_47.7z。
解压出来,发现压缩的文件夹和文件都“顶”到当前根目录上了:
D:\cpWorkZone\Practice\CompressCommand\BackupFolder\SourceFolder_2020-11-10_11_15_47>tree /F
卷 D_HDD_931 的文件夹 PATH 列表
卷序列号为 5264-1BBA
D:.
│ Folder2_File2.txt
│
├─Folder1
│ Folder1_File1.txt
│
└─Folder3
Folder3_File1.txt
Folder3_File2.txt
Folder3_File3.txt虽然也能用,但是缺少了源目录的目录结构,当然确实可以使用“tree /F > FolderTree.txt”把目录结构保存到FolderTree.txt文本文件里保存起来,不过,操作有点繁琐。
用7z命令压缩多个文件夹和文件,并保留完整源目录路径到压缩包的方法:
1.
添加SourceFileList.txt,这里记录了需要压缩的源目录文件夹和文件的目录路径,内容:
D:\cpWorkZone\Practice\CompressCommand\SourceFolder\Folder1
D:\cpWorkZone\Practice\CompressCommand\SourceFolder\Folder2\Folder2_File2.txt
D:\cpWorkZone\Practice\CompressCommand\SourceFolder\Folder32.
使用7z的“-spf”开关,和“@listfile”开关,创建CompressCommand5.bat,的内容:
:: For compress, set source file list, target folder and target file name
set sourceFileList=D:\cpWorkZone\Practice\CompressCommand\CompressCommandFolder\SourceFileList.txt
set targetFolderPath=D:\cpWorkZone\Practice\CompressCommand\BackupFolder
set targetFileName=TargetFile:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set currentDateYear=%date:~0,4%
set currentDateMonth=%date:~5,2%
set currentDateDay=%date:~8,2%set timeTemp=%time: =0%
set currentTimeHour=%timeTemp:~0,2%
set currentTimeMinute=%time:~3,2%
set currentTimeSecond=%time:~6,2%set currentTimeString=%currentDateYear%-%currentDateMonth%-%currentDateDay%_%currentTimeHour%_%currentTimeMinute%_%currentTimeSecond%
:: echo %currentTimeString%set targetFilePath=%targetFolderPath%\%targetFileName%_%currentTimeString%.7z
:: echo %targetFilePath%7z.exe.lnk a -t7z %targetFilePath% -spf @%sourceFileList%
pause
3.
运行压缩命令,创建出来压缩包SourceFolder_2020-11-10_11_44_55.7z,解压可以看到:
D:\cpWorkZone\Practice\CompressCommand\BackupFolder\SourceFolder_2020-11-10_11_44_55>tree /F
卷 D_HDD_931 的文件夹 PATH 列表
卷序列号为 5264-1BBA
D:.
└─D_
└─cpWorkZone
└─Practice
└─CompressCommand
└─SourceFolder
├─Folder1
│ Folder1_File1.txt
│
├─Folder2
│ Folder2_File2.txt
│
└─Folder3
Folder3_File1.txt
Folder3_File2.txt
Folder3_File3.txt这个压缩包里保留了源目录的完整路径。
参考:
a.
《Command Line Syntax》的List file
https://sevenzip.osdn.jp/chm/cmdline/syntax.htmb.
7z命令帮助:
7-Zip 18.06 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2018-12-30Usage: 7z <command> [<switches>...] <archive_name> [<file_names>...]
<Commands>
a : Add files to archive
b : Benchmark
d : Delete files from archive
e : Extract files from archive (without using directory names)
h : Calculate hash values for files
i : Show information about supported formats
l : List contents of archive
rn : Rename files in archive
t : Test integrity of archive
u : Update files to archive
x : eXtract files with full paths<Switches>
-- : Stop switches parsing
@listfile : set path to listfile that contains file names
-ai[r[-|0]]{@listfile|!wildcard} : Include archives
-ax[r[-|0]]{@listfile|!wildcard} : eXclude archives
-ao{a|s|t|u} : set Overwrite mode
-an : disable archive_name field
-bb[0-3] : set output log level
-bd : disable progress indicator
-bs{o|e|p}{0|1|2} : set output stream for output/error/progress line
-bt : show execution time statistics
-i[r[-|0]]{@listfile|!wildcard} : Include filenames
-m{Parameters} : set compression Method
-mmt[N] : set number of CPU threads
-mx[N] : set compression level: -mx1 (fastest) ... -mx9 (ultra)
-o{Directory} : set Output directory
-p{Password} : set Password
-r[-|0] : Recurse subdirectories
-sa{a|e|s} : set Archive name mode
-scc{UTF-8|WIN|DOS} : set charset for for console input/output
-scs{UTF-8|UTF-16LE|UTF-16BE|WIN|DOS|{id}} : set charset for list files
-scrc[CRC32|CRC64|SHA1|SHA256|*] : set hash function for x, e, h commands
-sdel : delete files after compression
-seml[.] : send archive by email
-sfx[{name}] : Create SFX archive
-si[{name}] : read data from stdin
-slp : set Large Pages mode
-slt : show technical information for l (List) command
-snh : store hard links as links
-snl : store symbolic links as links
-sni : store NT security information
-sns[-] : store NTFS alternate streams
-so : write data to stdout
-spd : disable wildcard matching for file names
-spe : eliminate duplication of root folder for extract command
-spf : use fully qualified file paths
-ssc[-] : set sensitive case mode
-sse : stop archive creating, if it can't open some input file
-ssw : compress shared files
-stl : set archive timestamp from the most recently modified file
-stm{HexMask} : set CPU thread affinity mask (hexadecimal number)
-stx{Type} : exclude archive type
-t{Type} : Set type of archive
-u[-][p#][q#][r#][x#][y#][z#][!newArchiveName] : Update options
-v{Size}[b|k|m|g] : Create volumes
-w[{path}] : assign Work directory. Empty path means a temporary directory
-x[r[-|0]]{@listfile|!wildcard} : eXclude filenames
-y : assume Yes on all queriesc.
《Need leading zero for batch script using %time% variable》
https://serverfault.com/questions/147515/need-leading-zero-for-batch-script-using-time-variabled.
《String processing in windows batch files: How to pad value with leading zeros?》
https://stackoverflow.com/questions/13398545/string-processing-in-windows-batch-files-how-to-pad-value-with-leading-zeros -
WinRAR如何批量分别压缩不同的文件夹
2017-10-18 18:26:43全选所有文件夹,然后右击添加到压缩文件,然后在文件选项中勾选把每个文件放到单独的压缩文件中 OK了全选所有文件夹,然后右击添加到压缩文件,然后在文件选项中勾选把每个文件放到单独的压缩文件中OK了
-
批量将很多文件夹打包压缩成多个ZIP和7z压缩包文件
2022-04-07 10:22:10我们有很多文件夹需要打包成 ZIP 和 7z 压缩包,我们平常最常见的就是自己手工将一些文件夹打包成一个独立的 ZIP 和 7z 压缩包,但是我们有时候也需要将很多个文件夹单独打包成单个 ZIP 和 7z 压缩包。 比如说我们...概要:我们有时候需要将很多不同类型的文件夹单独打包成一个 ZIP 压缩包或者单独的打包成一个 7z 压缩包,我们一个一个处理的话比较慢,但是有没有一种批量将文件夹转成 ZIP 和 7z 压缩包的方法呢?
我们有很多文件夹需要打包成 ZIP 和 7z 压缩包,我们平常最常见的就是自己手工将一些文件夹打包成一个独立的 ZIP 和 7z 压缩包,但是我们有时候也需要将很多个文件夹单独打包成单个 ZIP 和 7z 压缩包。
比如说我们有 100 个文件夹,我们需要打包成 100 个 ZIP 和 7z 压缩包。这些压缩包可以是 100 个 ZIP 压缩包,也可以是 100 个 7z 压缩包。以前我们没有很好的办法去批量的将文件夹转成 ZIP 和 7z 压缩包的格式,但是现在我们可以使用这个方法批量将很多个文件夹打包成单独的 ZIP 和 7z 压缩包。
首先我们打开「我的ABC软件工具箱」,进入到文件夹转成压缩包的功能,如下图:
在这里我们需要添加批量打包成 ZIP 和 7z 压缩包的文件夹:
当我们添加完需要批量转换为 ZIP 和 7z 压缩包格式的文件夹之后,直接单击下一步,那么我们就可以批量设置最终压缩包的格式是 ZIP 还是 7z ,我们还可以批量的设置 ZIP 和 7z 压缩包的密码。
这对我们平常的文件夹管理来说非常的方便,这样我们就不用手工的将一个一个的文件夹转成 ZIP 和 7z 压缩包文件了。有了这个方法之后,我们就可以大量的生成 ZIP 和 7z 压缩包文件,并且还可以批量的设置这些 ZIP 和 7z 压缩包文件的密码。
这对我们平常的文件夹管理来说非常的方便,这样我们就不用手工的将一个一个的文件夹转成 ZIP 和 7z 压缩包文件了。有了这个方法之后,我们就可以大量的生成 ZIP 和 7z 压缩包文件,并且还可以批量的设置这些 ZIP 和 7z 压缩包文件的密码。
-
C#压缩解压(可任意选择多个文件夹,文件一起压缩);BackgroundWorker配合进度条的使用-附件资源
2021-03-02 15:04:14C#压缩解压(可任意选择多个文件夹,文件一起压缩);BackgroundWorker配合进度条的使用-附件资源 -
java压缩文件夹递归实现将多个文件夹压缩在同一个zip包
2020-08-17 09:13:58该方法递归实现将多个文件夹压缩在同一个zip包中 然后删除文件夹directoryName 下需要被压缩的文件。 package com.chuangqi.tools; import java.io.File; import java.io.FileInputStream; import java.io.... -
详解linux下tar压缩解压缩文件夹的命令与参数
2021-01-11 03:20:39tar在linux上是常用的打包、压缩、加压缩工具,他的参数很多,这篇文章仅仅列举常用的压缩与解压缩参数,下面直接先上三个常用命令,一起来看看吧 1、压缩当前目录下文件夹/文件test到test.tar.gz: tar -zcvf test... -
java提供的压缩方法压缩文件夹(可以包含多个子文件夹)
2020-06-03 16:26:56} public static void zipDir(String directoryName, ZipOutputStream zos, String basePath) { /** * 该方法递归实现将多个文件夹压缩在同一个zip包中 然后删除文件夹directoryName 下需要被压缩的文件。... -
使用rar压缩指定文件夹下的的多个文件夹
2009-03-11 16:05:22使用rar压缩指定文件夹下的多个文件夹 使用rar压缩指定文件夹下的多个文件夹 -
如何压缩多个文件\文件夹(GZipStream and C#)
2010-04-13 12:50:37在.Net Framework 2.0 中添加了System.IO.Compression 类来实现对文件/文件夹的压缩/解压(GZipStream方法),包括文档,代码,类文件 -
tar 压缩文件时候忽略一个或者多个文件夹
2018-11-12 17:25:33例如: 我们以tomcat 为例,打包的时候我们要排除 tomcat/logs 目录,命令...如果要排除多个目录,增加 --exclude 即可,如下命令排除logs和libs两个目录及文件xiaoshan.txt: tar -zcvf tomcat.tar.gz --exclud... -
java 压缩/解压 zip 多个文件和文件夹
2018-03-12 09:58:32参考了几篇文章,基本都是压缩单个文件或者一个文件夹,不能混合压缩。 找了一个不需要额外jar包的代码上改的。(参考文章) 不需要额外jar包。 压缩方法: import java.io.File; import java.io.FileInputStream; ... -
Linux压缩多个文件或者文件夹的命令
2017-05-16 17:51:42tar -czvf a.tar.gz(想压缩文件名) 源文件名1 源文件名2 源文件夹1 源文件夹2 -
0002-winrar批量压缩文件夹
2021-06-12 20:16:063.点击“文件”后,跳转界面如下图所示,选择“把每个文件夹放到单独的压缩文件中”,点击“追加”然后全选所有文件, 如果要进行其他操作,可以选择“要排除的文件” “不压缩直接存储的文件” “文件路径” 4.... -
多文件夹下压缩文件批量解压
2019-07-18 14:40:26最近需要使用到同一根目录下多文件夹中的压缩文件,发现数量庞大,不便于手动解压,遂网上搜索解决方案。 找到了一个教程,稍作修改,可以使用,记录一下。 Windows10、 winRAR 新建".txt"文件代码如下: @echo ... -
使用java API实现zip递归压缩和解压文件夹
2020-08-18 15:57:34主要介绍了使用java API实现zip递归压缩文件夹及解压,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 -
Linux 系统如何解压缩多个.zip文件到同文件夹? 如何合并子文件夹到同一个文件夹?
2019-02-13 05:07:10如果想把它们解压缩到同一个文件夹(举例名为unzipped),命令为: unzip '*.zip' -d unzipped *可以根据共同前后缀灵活运用。 但是这样我还是不满意。 在同一个文件夹后,解压做的1.zip, 2.... -
java压缩文件夹
2013-05-23 11:09:17java压缩文件夹,文件夹名称和文件名称支持中文 -
C#实现将文件、文件夹压缩为压缩包
2021-07-16 22:00:30一、C#实现将文件、文件夹压缩为压缩包核心 /*** * Title:"基础工具" 项目 * 主题:压缩包帮助类 * Description: * 功能:【该压缩方法来自:https://www.cnblogs.com/Chary/p/No0000DF.html】 * 1、创建 ... -
Linux中批量压缩文件夹
2020-07-21 10:26:08把多个文件夹压缩在同一个压缩包 tar -zcvf test.tar.gz test1 test2 或者: for i in `find ./* -type d`;do zip $i.zip ./$i/*;done 'find ./* -type d' 表示查找所有文件夹,-type d就表示指定文件夹类型,... -
C#压缩解压(可任意选择多个文件夹,文件一起压缩);BackgroundWorker配合进度条的使用
2017-07-11 16:48:56如,下图操作,任意选择要压缩的文件夹,文件,设置压缩后保存的文件,点压缩按钮 执行效果如下 执行完的test1.zip 压缩需要引用using ICSharpCode.SharpZipLib.Zip; 可在... -
Java压缩文件和文件夹为zip格式
2021-03-03 17:26:25public class ZipUtils { /** * * 文件夹压缩成ZIP * * @param srcDir 压缩文件夹路径 * @param out 压缩文件输出流 * @param keepDirStructure 是否保留原来的目录结构,true:保留目录结构; * * false:所有文件跑到... -
C#多文件夹压缩
2017-12-17 09:59:25说明:依赖于ICSharpCode.SharpZipLib.dll 1、直接上代码了(仅作参考) /// <... /// 调用压缩文件 /// </summary> /// <returns></returns> public ActionResult... -
CentOS下文件/文件夹的压缩和解压命令用法详解
2020-10-16 15:03:00-c 建立一个压缩文件的参数指令(create) –压缩-x 解开一个压缩文件的参数指令(extract) –解压-z 是否需要gzip压缩-v 显示压缩的过程(verbose)-f 使用档名,在f之后要立即接档名(file) 压缩: tar -zcvf 文件名 ... -
Linux中批量压缩文件夹到单独的压缩包
2021-12-11 14:58:57问题:某漫画软件只认zip档案,提前解压成图片的漫画文件夹要再压回zip 解决办法:xargs 传参数 步骤: 1.进入目录 2.执行下列命令 ls |xargs -i -execdir zip -r '{}.zip' '{}' \; -
python 文件压缩(压缩一个文件夹下的所有文件)
2021-04-29 16:24:15filepath = os.path.join(root, filename) file_paths.append(filepath) # 返回所有文件路径 return file_paths def main(): # 要压缩的文件夹名 directory = '齐普夫定律' file_paths = get_all_file_paths... -
VC使用ZLIB压缩解压多级文件夹
2018-11-16 22:45:19这个代码MFC工程应用是自己写的,文件夹压缩与解压LIB主要是根据:csdn论坛的itloverwm 的资源使用ZLIB库压缩解压源码(支持多级文件夹压缩和解压),地址是:http://download.csdn.net/detail/itloverwm/3928457 上... -
js压缩文件或文件夹
2021-10-22 11:14:25JS压缩文件/文件夹 首先说一下,这里的 JS压缩文件/文件夹 不是各位想的那么美好????,想着接下来博主写个js的压缩方法,我拷贝走直接用就万事大吉的同志,很遗憾告诉你们,这篇博客说的不是这样的。 文章有点长,...