当前位置: 首页 > news >正文

济南科技网站建设python基础教程百度云

济南科技网站建设,python基础教程百度云,网站系统使用说明书,产品推广策划案原文链接:http://www.juzicode.com/python-tutorial-zip-unzip-zipfile 本文介绍zipfile模块的使用,zipfile可以用来解压或压缩zip格式的文档。 1、判断是否为zip格式的文件 使用is_zipfile(文件路径)返回True表示为zipfile模块支持的zip文件&#xff…

原文链接:http://www.juzicode.com/python-tutorial-zip-unzip-zipfile

本文介绍zipfile模块的使用,zipfile可以用来解压或压缩zip格式的文档。

1、判断是否为zip格式的文件

使用is_zipfile(文件路径)返回True表示为zipfile模块支持的zip文件,否则为不支持的文件。下面这个例子分别判断zip格式和用7zip压缩生成的7z格式的2个文件是否为zip文件:

import  zipfile
print('files.7z   is_zipfile():',zipfile.is_zipfile('files.7z'))
print('files.zip  is_zipfile():',zipfile.is_zipfile('files.zip'))

运行结果:

files.7z   is_zipfile(): False
files.zip  is_zipfile(): True

如果不确定一个文件是否能用zipfile模块操作,可以在使用前用 is_zipfile() 检查是否为zip格式的文件。

2、获取zip文件信息、解压文件

2.1、创建ZipFile实例

首先用ZipFile()创建一个文件实例zf,传入文件名,mode入参默认为读模式:mode=’r’,可以不写。

import  zipfile
zf = zipfile.ZipFile('files.zip')
print(type(zf))

运行结果:

<class 'zipfile.ZipFile'>

2.2、查看zip文件信息

通过namelist()方法可以查看文件清单,infolist()方法则返回内部文件的信息列表,可以查看文件大小、CRC、文件名称等,这里压缩文档files.zip的结构如下图:

juzicode.com / VX:桔子code
import  zipfile
zf = zipfile.ZipFile('files.zip')
print(type(zf))
#查看文件清单
print(zf.namelist())
#查看内部文件信息
for info in zf.infolist():print(info)    print('filename:',info.filename)    #文件名称print('compress_type:',info.compress_type)#压缩类型print('is_dir:',info.is_dir())    #是否为路径print('file_size:',info.file_size)   #文件原始大小    print('compress_size:',info.compress_size)   #文件压缩后大小print('CRC:',info.CRC)         #crc

运行结果:

<class 'zipfile.ZipFile'>
['files/', 'files/1.txt', 'files/2.txt', 'files/3.bmp']
<ZipInfo filename='files/' external_attr=0x10>
filename: files/
compress_type: 0
is_dir: True
file_size: 0
compress_size: 0
CRC: 0
<ZipInfo filename='files/1.txt' external_attr=0x20 file_size=20>
filename: files/1.txt
compress_type: 0
is_dir: False
file_size: 20
compress_size: 20
CRC: 2536054424
<ZipInfo filename='files/2.txt' external_attr=0x20 file_size=12>
filename: files/2.txt
compress_type: 0
is_dir: False
file_size: 12
compress_size: 12
CRC: 3281828313
<ZipInfo filename='files/3.bmp' compress_type=deflate external_attr=0x20 file_size=2847150 compress_size=3461>
filename: files/3.bmp
compress_type: 8
is_dir: False
file_size: 2847150
compress_size: 3461
CRC: 1274188157

2.3、解压文件

使用extractall(path=None, members=None, pwd=None)方法解压文件。

如果不带path入参,默认解压到当前工作目录,如果带path参数则解压到path所表示的路径,没有该路径还会创建该路径。

import  zipfile
zf = zipfile.ZipFile('files.zip')
ret=zf.extractall()  #解压到当前工作目录
print(ret)
ret=zf.extractall(path='E:\\juzicode\\unzip')#解压到指定目录
print(ret)

运行结果显示extractall() 总是返回None。

members参数为 infolist() 返回的ZipInfo实例或者文件名称列表,假设知道压缩文档中包含:’files/1.txt’,’files/2.txt’,则可以指定members=[‘files/1.txt’,’files/2.txt’]解压这2个文件,或者使用members=zf.infolist()[:2]解压压缩文档中前2个文件:

import  zipfile
zf = zipfile.ZipFile('files.zip')
ret=zf.extractall(path='E:\\juzicode\\unzip1',members=zf.infolist()[:2])
print(ret)
ret=zf.extractall(path='E:\\juzicode\\unzip2',members=['files/1.txt','files/2.txt'])
print(ret)

另外还可以使用extract(member, path=None, pwd=None)解压member表示的单个文件。

其中path变量的功能和ectractall()一样。

member参数可以用压缩文档中的单个文件名member=‘files/1.txt’,或者用单个ZipInfo实例member=zf.infolist()[2],这里注意和extractall()的差异,在extractall()方法里的members参数用的是列表表示多个文件。

#juzicode.com / VX:桔子code
import  zipfile
zf = zipfile.ZipFile('files.zip')
ret=zf.extract('files/1.txt',path='unzip1') 
print(ret)
ret=zf.extract(zf.infolist()[3],path='unzip2') 
print(ret) 

运行结果:

unzip1\files\1.txt   #member='files/1.txt'
unzip2\files\3.bmp   #member=zf.infolist()[3]

extract()方法会返回解压缩文档的名称,这点和extractall()有差异。

另外需要注意的是压缩文档可能是来自不同的操作系统,也可能是来自不可信的其他来源,为了安全考虑压缩文档中某些特殊路径在解压缩后会做特殊处理。比如windows系统的盘符以及linux系统的根目录解压后都会去除。另外如果包含..表示的上一层目录也会去掉,而windows下非法的字符会被下划线替代。

3、压缩文件

这里的例子中原始文件结构如下,在files目录下包含了3个文件:

E:\juzicode>tree files /fE:\JUZICODE\FILES1.txt2.txt3.bmp

3.1、write()方法

首先用ZipFile()创建一个文件实例zf,传入压缩文件名,mode=’w’表示要创建压缩文档。

然后使用write()传入文件名称,写入压缩文档。

最后用close()关闭压缩文档。

#juzicode.com / VX:桔子code
import  zipfile
zf = zipfile.ZipFile('files2.zip', mode = 'w')
zf.write('files/1.txt')  #写入压缩文档
zf.write('files/2.txt')  
zf.close()    #如果后面要再次打开files2.zip,这行是必须的

可以读出刚才创建压缩文档的文件信息:

zf = zipfile.ZipFile('files2.zip', mode = 'r')
for info in zf.infolist():print(info)    print('filename:',info.filename)    #文件名称print('compress_type:',info.compress_type)#压缩类型print('is_dir:',info.is_dir())    #是否为路径print('file_size:',info.file_size)   #文件原始大小    print('compress_size:',info.compress_size)   #文件压缩后大小print('CRC:',info.CRC)         #crc
zf.close()

运行结果:

<ZipInfo filename='files/1.txt' filemode='-rw-rw-rw-' file_size=20>
filename: files/1.txt
compress_type: 0
is_dir: False
file_size: 20
compress_size: 20
CRC: 2536054424
<ZipInfo filename='files/2.txt' filemode='-rw-rw-rw-' file_size=12>
filename: files/2.txt
compress_type: 0
is_dir: False
file_size: 12
compress_size: 12
CRC: 3281828313

另外write()方法压缩文件时,还支持使用arcname修改压缩文档中的名称,比如下面这个例子中将未压缩文件files/1.txt经过压缩后在压缩文档中变成了files1/1ac.txt。

import  zipfile
zf = zipfile.ZipFile('files2.zip', mode = 'w')
zf.write('files/1.txt',arcname='files/1ac.txt')
zf.write('files/2.txt')
zf.write('files/3.bmp')
zf.close()

运行后看到的压缩文件结构:

当使用arcname修改文档名称时,如果包含了盘符或者根目录,出于安全考虑将会去掉盘符或根目录:

#juzicode.com / VX:桔子code
import  zipfile
zf = zipfile.ZipFile('files2.zip', mode = 'w')
zf.write('files/1.txt',arcname='e:/juzicode/1ac.txt')
zf.write('files/2.txt',arcname='/juzicode/2ef.txt')
zf.write('files/3.bmp')
zf.close()

运行后看到的压缩文件结构:

从这个例子可以看到盘符e:/和根目录/在压缩文档中都消失了。

但是如果使用了上层目录字符:“..” ,或者使用”* ?”等操作系统不识别的字符,压缩文档中仍然按照原样方式照常写入,只是在解压缩的时候会按照前面extract()或者extractall()方法中提到的规则去除或替代。

#juzicode.com / VX:桔子code
import  zipfile
zf = zipfile.ZipFile('files3.zip', mode = 'w')
zf.write('files/1.txt',arcname='../juzicode/1ac.txt')
zf.write('files/2.txt',arcname='2ef*.txt')
zf.write('files/3.bmp',arcname='3?xy.bmp')
zf.close()

运行后看到的压缩文件结构:

3.2、writestr()方法

writestr()方法和write()方法的流程大致相同:

首先用ZipFile()创建一个文件实例zf,传入压缩文件名,mode=’w’表示要创建压缩文档。

然后用writestr()写文件,第一个入参为文件名称或者ZipInfo实例,第2个入参data为字符串或者二进制数值。

最后用close()关闭压缩文档。

#juzicode.com / VX:桔子code
import  zipfile
pf = open('files/3.bmp','rb')
zf = zipfile.ZipFile('files1.zip', mode = 'w')
zf.writestr('files/123.txt','123567')   #字符串
zf.writestr('files/123.bmp',pf.read())  #bytes
pf.close()
zf.close()

运行后生成的压缩文件结构:

这个例子中生成了2个文件,一个为txt文本文件,写入的内容为字符串,一个为bmp图片文件,写入的是bytes类型的数据。

扩展阅读:

  1. Python桔子教程
http://www.yayakq.cn/news/844823/

相关文章:

  • 广州网站优化公司个人怎么注册域名
  • 商城网站有什么好处菏泽哪里做网站
  • 如何诊断网站为何被降权wordpress php5
  • 张家口网站建设深圳团购网站设计哪家好
  • 公司网站建设方案详细方案模板金融网站建设方案书
  • 网站建设模板平台济南 网站建设
  • 永久网站推广怎么建设一个网站并顺利打开浏览
  • 哪个网站是教人做淘宝客的seo和sem是什么意思啊
  • 学习网站建设千锋教育培训多少钱费用
  • 网站建设程序开发揭阳住房和城乡建设厅网站
  • 网上销售怎样做网站企业建网站选中企动力
  • 注册域名建设网站无锡优化网站排名
  • 跨境电商到什么网站做p2p网站怎么做
  • 租用服务器建设网站费用网站前台的网址
  • 网站的开发语言有哪些网站上线前准备方案
  • 网站建设方案ppt模板网站开发的需求文档
  • 司法局网站体制机制建设情况茂名市建设银行网站
  • 企业网站的建设哪个好如何建立一个公网可以访问的网站
  • 收费的网站怎么做网站与微信区别
  • 网站开发建立网站首页结构布局
  • 自己做个网站需要几个软件渭南微信小程序网站建设
  • 网站建设免责声明大良营销网站建设如何
  • 哪有做logo的网站企业展示型网站程序
  • 有关做甜点的网站网站服务器搬迁
  • 网站制作哪些北京一网数据软件有限公司
  • 建设网站运营成本高乐雅官方网站 哪个公司做的
  • 站长之家99网页前端技术
  • 制作一个网站数据库怎么做的沧州网络运营公司
  • 云服务器 做网站西安网站建设xazxcy
  • 郑州专业做微信网站靖江网站