设为首页 收藏本站
查看: 847|回复: 0

[经验分享] python zipfile模块学习笔记(一)

[复制链接]

尚未签到

发表于 2018-8-3 13:15:56 | 显示全部楼层 |阅读模式
  ZIP文件格式是一种常见的存档和压缩标准,这个zipfile模块提供了工具来创建、读取、写入、附加和列出一个ZIP文件。使用ZIP64扩展(即压缩文件大小超过4G),它能解压加密的ZIP文件,解密过程很慢。
  1、测试是否为ZIP文件
  is_zipfile()函数会返回一个布尔值来表示是否为ZIP文件,代码如下:
#!/usr/bin/python  
import zipfile
  
for filename in ['print_name.py', 'python.zip', 'uwsgi', 'admin']:
  
print '%20s %s' % (filename, zipfile.is_zipfile(filename))
  如果文件不存在或者不是ZIP文件会返回False。
[root@www home]# python zipfile_is_zipfile.py  
print_name.py False
  
python.zip True
  
uwsgi False
  
admin False
  2、读取ZIP文件的内容
  
#!/usr/bin/env python  
import zipfile
  

  
zf = zipfile.ZipFile('python.zip', 'r')
  
print zf.namelist()
  使用namelist() 函数,返回结果是一个列表
[root@www home]# python zipfile_namelist.py  
['test.txt']
  #这只能查看ZIP文件的部分内容,使用infolist() 或者 getinfo() 可以从ZIP文件中获取更多信息,代码如下:
import datetime  
import zipfile
  

  
def print_info(archive_name):
  
zf = zipfile.ZipFile(archive_name)
  
for info in zf.infolist():
  
print info.filename
  
print '\tComment:\t', info.comment
  
print '\tModified:\t', datetime.datetime(*info.date_time)
  
print '\tSystem:\t\t', info.create_system, '(0 = Windows, 3 = Unix)'
  
print '\tZIP version:\t', info.create_version
  
print '\tCompressed:\t', info.compress_size, 'bytes'
  
print '\tUncompressed:\t', info.file_size, 'bytes'
  
print
  

  
if __name__ == '__main__':
  
print_info('python.zip')
  执行上面代码显示如下结果:
[root@www home]# python zipfile_infolist.py  
test.txt
  
Comment:
  
Modified:   2013-09-06 20:09:58
  
System:     3 (0 = Windows, 3 = Unix)
  
ZIP version:    20
  
Compressed: 419430400 bytes
  
Uncompressed:   419430400 bytes
  使用getinfo()函数可以在ZIP文件内查找内容,代码如下:
#!/usr/bin/env python  
import zipfile
  

  
zf = zipfile.ZipFile('python.zip')
  
for filename in ['test.txt', 'notthere.txt']:
  
try:
  
info = zf.getinfo(filename)
  
except KeyError:
  
print 'ERROR: Did not find %s in zip file' % filename
  
else:
  
print "%s is %d bytes" % (info.filename, info.file_size)
  如果需要查找的不存在ZIP文档里,会返回一个KeyError错误。
[root@www home]# python zipfile_getinfo.py  
test.txt is 419430400 bytes
  
ERROR: Did not find notthere.txt in zip file
  3、从一个ZIP文档中提取文件
  
#!/usr/bin/env python  
import zipfile
  

  
zf = zipfile.ZipFile('python.zip')
  
for filename in ['test.txt', 'notihere.txt']:
  
try:
  
data = zf.read(filename)
  
except KeyError:
  
print 'ERROR: Did not find %s in zip file' % filename
  
else:
  
print filename, ':'
  
print repr(data)
  
print
  要提取的文件会被自动解压:
[root@www home]# python zipfile_read.py  

  
README.txt :
  
'The examples for the zipfile module use this file and example.zip as data.\n'
  

  
ERROR: Did not find notthere.txt in zip file
  4、创建一个新的ZIP文件
  创建新的ZIP归档文件代码如下:
  
#!/usr/bin/env python  

  
from zipfile_infolist import print_info
  
import zipfile
  

  
print 'creating archive'
  
zf = zipfile.ZipFile('zipfile_write.zip', 'w')
  
try:
  
print 'adding text.txt'
  
zf.write('text.txt')
  
finally:
  
print 'closing'
  
zf.close()
  

  
print
  
print_info('zipfile_write.zip')
  默认情况下不会对文件进行压缩:
[root@www home]# python zipfile_write.py  
creating archive
  
adding text.txt
  
closing
  

  
text.txt
  
Comment:
  
Modified:   2013-09-06 20:39:52
  
System:     3 (0 = Windows, 3 = Unix)
  
ZIP version:    20
  
Compressed: 104857600 bytes
  
Uncompressed:   104857600 bytes
  如果要对文件进行压缩,zlib模块是必须的,如果zlib可以使用,你可以使用zipfile.ZIP_DEFLATED设置压缩模式为单个文件或者归档一个整体。默认的压缩模式是zipfile.ZIP_STORED。
#!/usr/bin/env python  

  
from zipfile_infolist import print_info
  
import zipfile
  
try:
  
import zlib
  
compression = zipfile.ZIP_DEFLATED
  
except:
  
compression = zipfile.ZIP_STORED
  

  
modes = { zipfile.ZIP_DEFLATED: 'deflated',
  
zipfile.ZIP_STORED:   'stored',
  
}
  

  
print 'creating archive'
  
zf = zipfile.ZipFile('zipfile_write_compression.zip', mode='w')
  
try:
  
print 'adding text.txt with compression mode', modes[compression]
  
zf.write('text.txt', compress_type=compression)
  
finally:
  
print 'closing'
  
zf.close()
  

  
print
  
print_info('zipfile_write_compression.zip')
  这次文件被压缩:
[root@www home]# python zipfile_write_compression.py  
creating archive
  
adding text.txt with compression mode deflated
  
closing
  

  
text.txt
  
Comment:
  
Modified:   2013-09-06 20:39:52
  
System:     3 (0 = Windows, 3 = Unix)
  
ZIP version:    20
  
Compressed: 101923 bytes
  
Uncompressed:   104857600 bytes
  替换原始文件名:
#!/usr/bin/env python  

  
from zipfile_infolist import print_info
  
import zipfile
  

  
zf = zipfile.ZipFile('zipfile_write_arcname.zip', mode='w')
  
try:
  
zf.write('text.txt', arcname='NOT_README.txt')
  
finally:
  
zf.close()
  
print_info('zipfile_write_arcname.zip')
  结果显示原始文件名已经被替换了:
[root@www home]# python zipfile_write_arcname.py  
NOT_README.txt
  
Comment:
  
Modified:   2013-09-06 20:39:52
  
System:     3 (0 = Windows, 3 = Unix)
  
ZIP version:    20
  
Compressed: 104857600 bytes
  
Uncompressed:   104857600 bytes
  更多博文请移步:linux开源技术博客 http://www.chlinux.net
  本文参考:http://docs.python.org/2/library/zipfile
  http://pymotw.com/2/zipfile/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-545973-1-1.html 上篇帖子: Python 列表 list 数组 array 常用操作集锦 下篇帖子: python 2.6.6安装MySQL-python模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表