python 压缩模块大杂烩(zipfile,bz2,lzma,gzip,tarfile,zlib)
[*] 以下压缩模块请结合python的官方文档(https://docs.python.org/3.5/library/index.html)来实践或者对比(我的是python 3.5)
1.python-数据压与存档 zipfile压缩模块
ZIPFILEM模块简介:
ZIP文件格式是常见的归档和压缩标准。此模块提供用于创建,读取,写入,追加和列出ZIP文件的工具。任何高级使用此模块都需要了解PKZIP应用说明中定义的格式。此模
块当前不处理多磁盘ZIP文件。它可以处理使用ZIP64扩展的ZIP文件(即大小超过4 GiB的ZIP文件)。它支持ZIP存档中加密文件的解密,但它目前无法创建加密文件。解密非常慢,因为它是在本机Python而不是C中实现的。
1.zip压缩文件:
import os
import zipfile
path = "wirtefile";
list_test = []
os.chdir("test")
def f(path): # 这里就是遍历输入的文件路径是否包含目录,前提是判断当前路径下的文件是否包含目录
for i in os.listdir(path):
if os.path.isdir(path+"\\"+i) == True:
f(path+"\\"+i)
list_test.append(path+"\\"+i)
f(path)
with zipfile.ZipFile("../writefile.zip", "w") as zipf: # 调用zipfile模块的ZipFile方法生成对象
for i in list_test: # 遍历整个目录文件
zipf.write(i) # 调用write方法进行压缩
2.zip解压文件:
import os
import zipfile
if zipfile.is_zipfile("writefile.zip"): # 解压的话目录和文件都能操作
with zipfile.ZipFile("writefile.zip", "r") as zipf:
zipf.extractall() # 调用extractall()方法进行解压也可以用extract方法,和这个类似推荐使用extractall这个方法
3.不解压查看文件里面的内容:
1.ZipFile.printdir() # 显示目录下所有文件的列表
2.ZipFile.namelist() # 显示单独的文件列表
4.不解压查看文件里面的内容属性:
第一种方法:
info = ZipFile.getinfo(ZipFile.namelist()[1])
print(info)
第二种方法:
for i in ZipFile.infolist():
print(i)
5.其他方法:
(1)ZipFile.close():关闭ZipFile对象
(2)ZipFile.setpassword(pwd):设置解压文件的密码
(3)ZipFile.testzip():检查CRC校验和文件头
(4)zipinfo对象的方法:(第四点的两种方法都可以返回zipinfo对象)
ZipInfo.compress_type: 存档成员的压缩类型
ZipInfo.comment: 对单个档案成员的评论
ZipInfo.extra: 扩展现场数据
ZipInfo.create_system: 创建ZIP存档的系统
ZipInfo.create_version: 创建ZIP存档的PKZIP版本
ZipInfo.extract_version: 提取存档需要PKZIP版本
ZipInfo.reserved: 必须为零
ZipInfo.flag_bits: ZIP标志位
ZipInfo.volume: 文件头的卷号
ZipInfo.internal_attr: 内部属性
ZipInfo.external_attr: 外部文件属性
ZipInfo.header_offset: 字节偏移到文件头
ZipInfo.CRC: 未压缩文件的CRC-32
ZipInfo.compress_size: 压缩数据的大小
ZipInfo.file_size: 未压缩文件的大小
2.python-数据压与存档 bz2压缩模块
1.bz2压缩文件:
第一种方法:
import os
import bz2
writefile = bz2.BZ2File("test\\test.bz2", "wb") # bz2压缩文件也是以二进制压缩
# 除了BZ2File()函数还有open(filename,mode ='r',compresslevel = 9,encoding = None,errors = None,newline = None )函数可以打开文件 */
readfile = open("test\\zlib.txt", "rb")
data = readfile.read()
writefile.write(data)
writefile.close()
readfile.close()
第二种方法:
import os
import bz2
bb = bz2.BZ2Compressor()
writefile = open("test.bz2", "wb")
readfile = open("zlib.txt", "rb")
data = readfile.read(1024) # 这边指定了一次压缩1024个字节,当然了解压的时候也要每1024个字节的解压。如果嫌麻烦就直接用data = readfile.read()一次性的全读出来,但处理较大的文件的时候就需要现就一下怎么提升效率。
while data:
writefile.write(bb.compress(data))
data = readfile.read(1024)
writefile.write(bb.flush()) # 压缩之后一定要将flush()处理过的信息写进去
writefile.close()
readfile.close()
2.bz2解压文件:
第一种方法:
import os
import bz2
readfile = bz2.BZ2File("test\\test.bz2", "rb") # 记住一定是二进制形式的
writefile = open("test\\test.txt", "wb")
data = readfile.read()
writefile.write(data)
readfile.close()
writefile.close()
第二种方法:
import os
import bz2
bb = bz2.BZ2Decompressor()
readfile = open("test.bz2", "rb")
writefile = open("test.txt", "wb")
data = readfile.read(1024)
while data:
writefile.write(bb.decompress(data))
data = readfile.read(1024)
writefile.close()
readfile.close()
3.bz2的其他方法:
# compress和decompress更多的用于一次压缩;
# 而BZ2Decompressor和BZ2Compressor则是增量压缩(多次压缩并且添加到压缩文件中)
(1)compress(data,compresslevel = 9)
# data就是传入的需要压缩的数据,可以从文件中读取也可以指定字符串压缩,比如a = "Hello World",文件的话 a = readfile,read(), b = bz2.compress(a, compresslevel=9), b就是压缩过的数据,灵活变通一下嘛
(2)decompress()
# 同上
3.python-数据压与存档 lzma压缩模块
1.lamz压缩文件:
import lzma
import os
# 可以用open()方法也可以用lzma.LZMAFile()方法;
# 区别是lzma.LZMAFile()方法只能打开二进制文件
with lzma.open("file.xz", "wb") as writefile:
with open("zlib.txt", "rb") as readfile:
data = readfile.read(100)
while data:
writefile.write(data)
data = readfile.read(100)
2.lamz解压文件:
import lzma
import os
with lzma.open("file.xz", "rb") as readfile:
with open("zlib_test.txt", "wb") as writefile:
data = readfile.read(100)
while data:
writefile.write(data)
data = readfile.read(100)
3.lamz的其他方法
(1)lzma.LZMACompressor()和lzma.LZMADecompressor()都是增量压缩
(2)compress()和decompress()方法用于压缩和解压 #和bz2的一样嘛
4.python-数据压与存档 tarfile压缩模块
1.tarfile压缩文件:
import os
import tarfile
path = "wirtefile";
list_test = []
os.chdir("test")
def f(path):
for i in os.listdir(path):
if os.path.isdir(path+"\\"+i) == True:
f(path+"\\"+i)
list_test.append(path+"\\"+i)
f(path)
# w:gz 等同于 w|gz
# open的第二个参数是w,那么压缩格式就对应着.tar
# open的第二个参数是w:gz,那么压缩格式就对应这.tar.gz
# open的第二个参数是w:bz2,那么压缩格式就对应这.tar.bz2
# open的第二个参数是r:xz,那么解压格式就对应这.tar.xz
tar = tarfile.open("../test.tar", "w")
for i in list_test:
tar.add(i)
tar.close()
2.tarfile解压文件:
import os
import tarfile
# w:gz 等同于 w|gz
# open的第二个参数是r,那么解压格式就对应着.tar
# open的第二个参数是r:gz,那么解压格式就对应这.tar.gz
# open的第二个参数是r:bz2,那么解压格式就对应这.tar.bz2
# open的第二个参数是r:xz,那么解压格式就对应这.tar.xz
tar = tarfile.open("test.tar", "r")//也可以用tarfile.TarFile()获取文件
file_names = tar.getnames()
for file_name in file_names:
tar.extract(file_name)
3.用法其他:
(1)TarFile.getmembers()和TarFile.getmember()两个函数返回TarInfo对象
(2)TarFile.list()是打印文件的详细信息
(3)TarInfo对象:
TarInfo.name: 存档成员的名称
TarInfo.size: 大小以字节为单位
TarInfo.mtime: 最后修改的时间
TarInfo.mode: 权限位
TarInfo.type: 文件类型
TarInfo.linkname: 目标文件名的名称
TarInfo.uid: 最初存储此成员的用户的用户标识
TarInfo.gid: 最初存储此成员的用户的组ID。
TarInfo.uname: 用户名。
TarInfo.gname: 团队名字。
TarInfo.pax_headers: 包含关联的pax扩展头的键值对的字典
TarInfo.isfile(): True如果Tarinfo对象是常规文件,则返回。
TarInfo.isreg(): 与...相同isfile()。
TarInfo.isdir(): True如果是目录则返回。
TarInfo.issym(): True如果它是符号链接则返回。
TarInfo.islnk(): True如果是硬链接则返回。
TarInfo.ischr(): True如果是角色设备则返回。
TarInfo.isblk(): True如果它是块设备则返回。
TarInfo.isfifo(): True如果是FIFO,则返回。
TarInfo.isdev(): True如果是字符设备,块设备或FIFO之一,则返回。
5.python-数据压与存档 zlib压缩模块
1.zlib压缩文件:
import os
import zlib
compress = zlib.compressobj(9) # 1-9,1表示速度最快,压缩率最低;9表示速度最慢但压缩率最高
with open("zlib.txt", "rb") as readfile: # zlib的压缩是以二进制形式的压缩
with open("zlib_gz.txt", "wb") as writefile:
data = readfile.read(1024)
while data:
writefile.write(compress.compress(data))
data = readfile.read(1024)
writefile.write(compress.flush())
2.zlib解压文件:
import os
import zlib
decompress = zlib.decompressobj()
with open("zlib.gz", "rb") as readfile:
with open("zlib_test.txt", "wb") as writefile:
data = readfile.read(1024)
while data:
writefile.write(decompress.decompress(data))
data = readfile.read(1024)
writefile.write(decompress.flush())
3.其他方法:
(1)Decompress.eof:一个布尔值,指示是否已到达压缩数据流的末尾
6.python-数据压与存档 gzip压缩模块
1.gzip压缩文件:
第一种方法:
import os
import gzip
with open("zlib.txt", "rb") as readfile:
with gzip.open("zlib.gz", "wb") as writefile: # open也有compresslevel参数
writefile.writelines(readfile)
第二种方法:
import os
import gzip
g = gzip.GzipFile(filename="", mode="wb", compresslevel=9, fileobj=open('test\\zlib.gz', 'wb'))
g.write(open('test\\zlib.txt', "rb").read())
g.close()
2.gzip解压文件:
第一种方法:
import os
import gzip
with open("zlib_test.txt", "wb") as writefile:
with gzip.open("zlib.gz", "rb") as readfile:
writefile.write(readfile.read())
第二种方法:
import os
import gzip
g = gzip.GzipFile(mode="rb", fileobj=open('zlib.gz', 'rb'))
open("test.txt", "wb").write(g.read())
3.gzip的其他方法:
(1)compress()
(2)decompress()
总结:本文的压缩模块有zipfile,bz2,lzma,gzip,tarfile,zlib这6个压缩模块其中能方便的文件夹压缩的有zipfile和tarfile这个2个,其他模块对单个文件压缩,或者说是字符串的二进制压缩(你懂我的意思吧)比较方便,至于压缩文件夹我还没想到好的方法。当然了以上的程序能完成对文件的基本压缩和解压,至于一些高级用法以及在官方文档中没用的函数等,比如压缩的进度控制,等有时间研究过后我在更新一下,呵呵…
PS:如果认为我这个博客有什么问题或者有修改意见的,请一定要告诉我,非常感谢(我的邮箱2412875746@qq.com)
python 压缩模块大杂烩(zipfile,bz2,lzma,gzip,tarfile,zlib)的更多相关文章
- python第三方模块大杂烩
Python单元测试框架之pytest---如何执行测试用例 unittest单元测试框架实现参数化 (用例有相似参数断言时使用,可以精简代码) python中标示符作用详解 一篇文章让你彻底搞清楚P ...
- Python压缩&解压缩
Python中常用的压缩模块有zipfile.tarfile.gzip 1.zipfile模块的简单使用 import zipfile # 压缩 z1 = zipfile.ZipFile('zip_t ...
- Python3 压缩与解压缩(zlib / gzip / bz2 / lzma / zipfile / tarfile)
本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/72672703 以下代码以Python3.6.1为例 L ...
- Python之文件与目录操作及压缩模块(os、shutil、zipfile、tarfile)
Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读取或写入 os.path模块 文件路径操作 os模块 文件和目录简单操作 zipfile模 ...
- Python 基础之压缩模块zipfile与tarfile
一.压缩模块 zipfile (1)创建一个zip压缩包 import zipfile #zip_deflated 代表是压缩的意思#打开压缩包zf = zipfile.ZipFile("c ...
- Python的压缩文件处理 zipfile & tarfile
本文从以下两个方面, 阐述Python的压缩文件处理方式: 一. zipfile 二. tarfile 一. zipfile 虽然叫zipfile,但是除了zip之外,rar,war,jar这些压缩( ...
- python用模块zlib压缩与解压字符串和文件的方法
摘自:http://www.jb51.net/article/100218.htm Python标准模块中,有多个模块用于数据的压缩与解压缩,如zipfile,gzip, bz2等等. python中 ...
- Python中模块之shutil及zipfile&tarfile的功能介绍
shutil的功能介绍及其他打包.压缩模块 1. shutil模块的方法 chown 更改指定路径的属组 2. copy 拷贝文件和权限 方法:shutil.copy(src,dst,*,follow ...
- Python之路(第十八篇)shutil 模块、zipfile模块、configparser模块
一.shutil 模块 1.shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中,需要打开文件 import shutil shutil.co ...
随机推荐
- C#连接Excel读取与写入数据库SQL ( 下 )
接上期 dataset简而言之可以理解为 虚拟的 数据库或是Excel文件.而dataset里的datatable 可以理解为数据库中的table活着Excel里的sheet(Excel里面不是可以新 ...
- 测试平台系列(4) 使用Flask蓝图(blueprint)
使用Flask蓝图(blueprint) 回顾 先来看一下上一篇的作业吧,使用「logbook」的时候,遇到了时区不对的情况.那么我们怎么去解决这个问题呢? 实际上logbook默认采用的是世界标准时 ...
- AOP(面向切面编程)大概了解一下
前言 上一篇在聊MemoryCache的时候,用到了Autofac提供的拦截器进行面向切面编程,很明显能体会到其优势,既然涉及到了,那就趁热打铁,一起来探探面向切面编程. 正文 1. 概述 在软件业, ...
- PHP配置 4. 虚拟主机配置open_basedir
将/usr/local/php/etc/php.ini中open_basedir注释掉,编辑虚拟主机配置open_basedir #vim /usr/local/apache2 .4/conf/ext ...
- Apache配置 1. 默认虚拟主机
编辑httpd.conf搜索httpd-vhosts,去掉#号 # vi /usr/local/apache2.4/conf/httpd.conf Include conf/extra/httpd-v ...
- PicGo 图床配置【工具篇】
Github图床(舍弃) step1 下载PicGo 下载链接: https://github.com/Molunerfinn/picgo/releases step2 新建仓库作为上传图片的目标地址 ...
- 使用代码生成工具快速开发ABP框架项目
在一般系统开发中,我们一般要借助于高度定制化的代码生成工具,用于统一代码风,节省开发时间,提高开发效率.不同的项目,它的项目不同分层的基类定义不同,我们需要在框架基类的基础上扩展我们的业务类代码,尽量 ...
- 简历求职:STAR法则
做了近2年的大学生就业辅导工作,也接触了很多即将走出校园的大学生,做个总结与大家分享,同时也是对自己的一个总结. 最近刚听说STAR法则,这也是一直我们给学生的指导思想,百度了一下: STAR法则,即 ...
- maven 常用命名
maven项目,在命令行中操作,非常简洁.高效,现将maven项目常用命令行总结如下: maven命令行命令总结 序号 整理 统计 命令 作用 1 基本 5 mvn -v 查看maven版本 2 mv ...
- P1036_选数(JAVA语言)
题目描述 已知 n 个整数x1,x2,-,xn,以及1个整数k(k<n).从n个整数中任选k个整数相加,可分别得到一系列的和.例如当n=4,k=3,4个整数分别为3,7,12,19时,可得 ...