一 python压缩解压libs
zlib:infozip免费的压缩lib。
bzip2:读写bz压缩文件,与bzip2和bunzip2压缩程序兼容。
gzip: 读写gz压缩文件,与GNU压缩程序gzip和gunzip兼容。
zipfile:读写zip压缩文件,与zip,unzip,pkzip,pkunzip,winzip等程序兼容。
tar:读写tar包文件。7z等程序可以大包和解包tar。
二:压缩zip文件并写入日志
import os import zipfile filename='c:/Temp.zip' curdir="C:/Temp/" os.chdir(curdir) #Create the zip file tFile = zipfile.ZipFile(filename, 'w') #Write directory contents to the zip file files = os.listdir(curdir) for f in files: tFile.write(f) #List archived files for f in tFile.namelist(): print ("Added %s" % f) #close the zip file tFile.close() #whether the file is zip file print(zipfile.is_zipfile(filename)) #list all file in the zip file tFile = zipfile.ZipFile(filename, 'r') for file in tFile.namelist(): print(file) #List info for archived file tinfo=tFile.getinfo("test.log") print(tinfo.comment) print(tinfo.compress_size) print(tinfo.date_time) print(tinfo.file_size) print(tinfo.compress_type) print(tinfo.filename) #Read zipped file into a buffer buffer = tFile.read("test.log") print (buffer) #close the zip file tFile.close()
三:zip的目录压缩与解压
#coding=utf-8 #甄码农python代码 #使用zipfile做目录压缩,解压缩功能 import os,os.path import zipfile def zip_dir(dirname,zipfilename): filelist = [] if os.path.isfile(dirname): filelist.append(dirname) else : for root, dirs, files in os.walk(dirname): for name in files: filelist.append(os.path.join(root, name)) zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED) for tar in filelist: arcname = tar[len(dirname):] #print arcname zf.write(tar,arcname) zf.close() def unzip_file(zipfilename, unziptodir): if not os.path.exists(unziptodir): os.mkdir(unziptodir, 0777) zfobj = zipfile.ZipFile(zipfilename) for name in zfobj.namelist(): name = name.replace('\\','/') if name.endswith('/'): os.mkdir(os.path.join(unziptodir, name)) else: ext_filename = os.path.join(unziptodir, name) ext_dir= os.path.dirname(ext_filename) if not os.path.exists(ext_dir) : os.mkdir(ext_dir,0777) outfile = open(ext_filename, 'wb') outfile.write(zfobj.read(name)) outfile.close() if __name__ == '__main__': zip_dir(r'c:/bbb',r'c:/aaa.zip') unzip_file(r'c:/aaa.zip',r'c:/bbb')
四:gz文件压缩
import gzip g = gzip.GzipFile(filename="", mode='wb', compresslevel=9, fileobj=open(r'c:\test.log.gz','wb')) g.write(open(r'c:\Temp.zip').read()) g.close()
五:gz 解压
import gzip g = gzip.GzipFile(fileobj=open(r'c:\test.log.gz','rb')) open(r'c:\Temp.zip','wb').write(g.read())
注:
filename :为生成的压缩文件 r:\test.log.gz 内包含的文件的名称。如果为空这代表随压缩文件名称变化而变化。
fileobj :生成的压缩文件对象。
g.write(open(r’r:\test.log’).read()):打开被压缩的文件并写入压缩文件。
fileobj :生成的压缩文件对象。
g.write(open(r’r:\test.log’).read()):打开被压缩的文件并写入压缩文件。
官方help
zlib模块支持提供的数据压缩,兼容GNU压缩程序gzip。此外,gzip模块提供 GzipFile类读写gzip格式文件,自动压缩或解压缩数据,因此类似一个普通文件对象。注意,其他可以被gzip和gunzip解压缩的文件格式, 如由compress和pack产生的压缩文件,不被这个模块支持。
模块定义了如下条例:
class GzipFile([filename[, mode[, compresslevel[, fileobj]]]])
构造GzipFile类,类似大部分文件对象方法,有readinto()和trancate()方法异常,至少fileobj和filename必须为一个non-trivial的值。
基于fileobj产生的新类实例可以产生一个规则文件,一个StringIO对象,或任何类似文件的对象。默认是None,此处filename是产生一个文件对象。
当fileobj是None,filename只能使用包含压缩文件的原始文件的gzip文件头,默认fileobj文件是可识别的,其他,必须默认为空文本,同时原始文件名不比包含文件头。
mode可以为’r’,’rb’,’a’,’ab’,’w’或‘wb’,依赖文件是否被读或被写。默认可识别的fileobj模式:其他情况下默认是‘rb’,如果没有设定,‘b’标志将被添加到模式保证文件打开二进制模式交叉平台兼容。
压缩级别参数是一个从1到9的整数,控制压缩级别。1最快,最小压缩,9最慢,最大压缩,默认为9。
调用GzipFile对象close()方法不会关闭fileobj,由于你可能在压缩数据后添加更多材料。支持传递一个打开的StringIO对象作为fileobj,获取内存缓冲区结果使用StringIO对象的getvalue()方法。
open(filename[, mode[, compresslevel]])
GzipFile的速记方法(filename,mode,compresslevel),参数filename需要,mode默认为’rb’,压缩级别默认为9
模块定义了如下条例:
class GzipFile([filename[, mode[, compresslevel[, fileobj]]]])
构造GzipFile类,类似大部分文件对象方法,有readinto()和trancate()方法异常,至少fileobj和filename必须为一个non-trivial的值。
基于fileobj产生的新类实例可以产生一个规则文件,一个StringIO对象,或任何类似文件的对象。默认是None,此处filename是产生一个文件对象。
当fileobj是None,filename只能使用包含压缩文件的原始文件的gzip文件头,默认fileobj文件是可识别的,其他,必须默认为空文本,同时原始文件名不比包含文件头。
mode可以为’r’,’rb’,’a’,’ab’,’w’或‘wb’,依赖文件是否被读或被写。默认可识别的fileobj模式:其他情况下默认是‘rb’,如果没有设定,‘b’标志将被添加到模式保证文件打开二进制模式交叉平台兼容。
压缩级别参数是一个从1到9的整数,控制压缩级别。1最快,最小压缩,9最慢,最大压缩,默认为9。
调用GzipFile对象close()方法不会关闭fileobj,由于你可能在压缩数据后添加更多材料。支持传递一个打开的StringIO对象作为fileobj,获取内存缓冲区结果使用StringIO对象的getvalue()方法。
open(filename[, mode[, compresslevel]])
GzipFile的速记方法(filename,mode,compresslevel),参数filename需要,mode默认为’rb’,压缩级别默认为9
六:tar.gz文件压缩
import os import tarfile tar = tarfile.open("c:Temp.zip.tar.gz","w:gz") for root,dir,files in os.walk("c:aaa"): for file in files: fullpath = os.path.join(root,file) tar.add(fullpath) #这样会把文件及目录也打包 #tar.add(fullpath,arcname=file) #这样只会把文件把到包中 tar.close()
七:tar.gz文件解压
import os import tarfile tar = tarfile.open("c:Temp.zip.tar.gz") names = tar.getnames() for name in names: tar.extract(name,path="c:bbb") tar.close()
注:
在打包的过程中可以设置压缩规则,如想要以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=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.
八:使用md5为文件加密码生成tgz文件
import os import shutil import tarfile import time from hashlib import md5 import logging import logging.config logging.config.fileConfig("logging.conf") logger = logging.getLogger("tar") def mv_source_file_to_temp(files,source_dir,temp_dir): for i in files: changeFilePath=os.path.join(source_dir,i); print changeFilePath shutil.move(changeFilePath,temp_dir); def tar_temp_file_to_objective(temp_dir,objective_temp_dir): filename=objective_temp_dir+'StatisticData_'+time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))+'_snp.tgz' tar = tarfile.open(filename,"w:gz") for root,dir,files in os.walk(temp_dir): global filelist ; filelist=files; for file in files: fullpath = os.path.join(root,file) tar.add(fullpath,arcname='upload/'+file) #生成的tgz文件在upload目录下 os.remove(os.path.join(temp_dir,file)); tar.close() return filename; def md5_file(name): m = md5() a_file = open(name, 'rb') m.update(a_file.read()) a_file.close() return m.hexdigest() if __name__ == '__main__': source_dir='D:tmp/'; #源目录 temp_dir='D:tar/temp/'; #源临时目录 objective_dir='D:'; #目标目录 objective_temp_dir='D:tar/tar/temp/'; #tar文件临时目录 file_group_size=10; #每个tgz中的文件个数 not_dispose_file_size=70; #源目录个数小于时不处理 if(not os.path.isdir(source_dir)): logger.error('source not filed'); exit(); elif(not os.path.isdir(temp_dir)): os.makedirs(temp_dir) elif(not os.path.isdir(objective_dir)): os.makedirs(objective_dir) elif(not os.path.isdir(objective_temp_dir)): os.makedirs(objective_temp_dir) elif(sum([len(files) for root,dirs,files in os.walk(source_dir)])<=not_dispose_file_size): logger.info('Don\'t deal with: log size '+str(sum([len(files) for root,dirs,files in os.walk(source_dir)]))); exit(); files=os.listdir(source_dir) ; file_group=[files[i:i+file_group_size] for i in xrange(0,len(files),file_group_size)]; for f in file_group: mv_source_file_to_temp(f,source_dir,temp_dir); filename=tar_temp_file_to_objective(temp_dir,objective_temp_dir); md5_code=md5_file(filename); file_name=os.path.basename(filename).replace('snp', md5_code); logger.info(str(filelist)+' in '+file_name) ; shutil.move(filename, os.path.join(objective_dir, file_name ));
日志配置文件
[loggers]
keys=root,simpleExample
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_simpleExample]
level=DEBUG
handlers=consoleHandler
qualname=simpleExample
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
keys=root,simpleExample
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_simpleExample]
level=DEBUG
handlers=consoleHandler
qualname=simpleExample
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
解压
from hashlib import md5 import os import re import tarfile import logging import logging.config def md5_file(name): m = md5() a_file = open(name, 'rb') m.update(a_file.read()) a_file.close() return m.hexdigest() def nu_tar(source_file,Objective_dir): tar = tarfile.open(source_file) names = tar.getnames() for name in names: tar.extract(name,path=Objective_dir) tar.close() if __name__ == '__main__': tar_source='D:'; file_Objective='D:'; file_name_regular='tgz$'; if(not os.path.isdir(tar_source)): logger.error('source not filed'); exit(); elif(not os.path.isdir(file_Objective)): os.makedirs(file_Objective) files=os.listdir(tar_source) ; file_list=[]; [(re.search(file_name_regular,file) and file_list.append(file) or '') for file in files]; for file_name in file_list: md5code=md5_file(tar_source+file_name); file_md5=file_name.split('_')[2]; if(re.search(md5code,file_md5)): nu_tar(tar_source+file_name,file_Objective);
相关推荐
标题"pyminizip资源包python解压缩专用"揭示了这个库的核心功能,即专为Python设计的ZIP文件处理工具,主要关注解压缩操作。与传统的命令行(CMD)方式相比,`pyminizip`提供了更便捷的API,无需设置环境变量,这...
### Python解压缩ZIP文件原理与实践笔记 #### 一、解压缩的基本概念 ##### 1.1 为什么需要解压缩 ZIP 是一种广泛使用的文件压缩格式,它将多个文件打包成一个单独的压缩文件,从而有效地减少了存储空间的需求以及...
Python是一种强大的编程语言,广泛应用在各种领域,包括文件处理,如解压缩操作。在这个场景中,我们可以使用Python来实现对RAR和ZIP格式的文件进行解压缩。这些功能通常由专门的库来提供,例如`zipfile`库用于处理...
现在市面上有一些解压缩软件是要收费的,大家有没有想过用python做一个解压缩程序呢 这篇文章里就是一个解压缩的程序(是exe),如果要完整代码,请看上一篇,或者下一个py文件
本文将详细探讨如何使用Python的`zipfile`模块来解压缩文件。 `zipfile`模块是Python标准库的一部分,它提供了对ZIP文件格式的完整支持,包括创建、读取、写入和更新ZIP文件。以下是一些关键的`zipfile`模块功能: ...
在这个主题中,我们将深入探讨如何使用Python进行文件的压缩与解压缩。Python提供了标准库`zipfile`和`gzip`等模块,可以方便地对ZIP和GZIP格式的文件进行操作。此外,还有第三方库如`tarfile`用于处理TAR格式的压缩...
python制作解压缩程序
pip install opencv-python numpy 2. 直接运行 main.py 脚本即可使用。 压缩原理: 1. 统计输入图像中每个像素值出现的频率,建立字符到频率的映射表 2. 根据频率使用最小堆构建 Huffman 树 3. 根据 Huffman 树为每个...
然而,如果要在Python程序中继续处理NetCDF数据,可能需要先解压缩再使用`netCDF4`库。这可以通过`shutil`库的`extract()`函数实现: ```python shutil.unpack_archive('data.nc.zip', 'unzipped_data') ``` 这会...
python代码实现pj zip解压缩文件 zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的 zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝...
以下知识点将详细解释如何使用Python解压缩ZIP文件,并在解压后删除这些文件,同时提供代码示例来说明这些操作。 ### 1. 解压缩ZIP文件 在Python中,`zipfile`模块提供了丰富的接口来处理ZIP格式的压缩文件。使用`...
Huffman 压缩解压工具, 基于 pyqt5 图形程序开发框架,采用 python 实现了 Huffman 编码压缩/解压算法,实现了对二进制文件进行压缩编码,和解压缩译码功能,界面交互简单友好,易于操作。 详细说明:...
在处理压缩文件时,Python 2.7 提供了内置的 `zipfile` 和 `tarfile` 模块,使得我们可以方便地进行解压缩操作。 1. **`zipfile` 模块**:这是 Python 用于处理 ZIP 压缩格式的库。你可以通过以下步骤来解压 ZIP ...
python实现 压缩解压缩各种文件,如zip,gzip,tar.gz,.bz2.
另外,`zipfile`和`tarfile`也可以用于处理从互联网下载的压缩文件,如自动解压缩并处理下载的资源。 5. **文件分析** 根据给定的文件名列表,`zip_tar.py`可能是一个实现压缩和解压缩功能的Python脚本,而`___...
使用Python制作解压缩软件的知识点主要包括了Python的zipfile模块的使用、os模块的基本用法、以及tkinter模块的引入和图形界面的设计。 首先,zipfile模块是Python标准库中用于操作ZIP文件的模块,它可以创建ZIP...
资源名称:python+批量解压缩后_提取目录内文件 类型:windows—exe可执行工具 环境:Windows10或以上系统 功能: 1、点击浏览,选择想要解压的文件夹 2、点击浏览,选择想要保存的路径 3、点击【开始解压】 4、点击...
利用python 对简单数字密码 简单英文密码 数字加英文字密码破解 ,密码越复杂 对计算机性能要求越高,四位数字破解较快
这些格式可以在读取数据时直接解压缩,例如使用`tf.io.gfile.GFile`配合`tf.io.decode_compressed`函数,可以方便地处理压缩文件。 2. 数据集压缩:在构建TensorFlow数据集(如`tf.data.Dataset`)时,可以利用`tf....