广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python zipfile模块学习笔记
  • 455
分享到

python zipfile模块学习笔记

学习笔记模块python 2023-01-31 07:01:01 455人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

ZIP文件格式是一种常见的存档和压缩标准,这个zipfile模块提供了工具来创建、读取、写入、附加和列出一个ZIP文件。使用ZIP64扩展(即压缩文件大小超过4G),它能解压加密的ZIP文件,解密过程很慢。1、测试是否为ZIP文件is_zi

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/

--结束END--

本文标题: python zipfile模块学习笔记

本文链接: https://www.lsjlt.com/news/191222.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python zipfile模块学习笔记
    ZIP文件格式是一种常见的存档和压缩标准,这个zipfile模块提供了工具来创建、读取、写入、附加和列出一个ZIP文件。使用ZIP64扩展(即压缩文件大小超过4G),它能解压加密的ZIP文件,解密过程很慢。1、测试是否为ZIP文件is_zi...
    99+
    2023-01-31
    学习笔记 模块 python
  • python os模块学习笔记
    import os os.mkdir(name) #创建目录 os.path.exists(name) #判断文件或者目录是否存在 os.path.isdir(name) #判断指定对象是否为目录。是True,否则Fa...
    99+
    2023-01-31
    学习笔记 模块 python
  • Python 学习笔记 (4)—— 模块
           模块基本上就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。        模块可以从其他程序 输入 以便利用它的功能。这也是我们使用Python标准库的方法。首先,我们...
    99+
    2023-01-31
    学习笔记 模块 Python
  • python学习笔记(九)、模块
    1 模块   使用import 语句从外部导入模块信息,python提供了很大内置模块。当你导入模块时,你会发现其所在目录中,除源代码文件外,还新建了一个名为__pycache__的子目录(在较旧的Python版本中,是扩展名为.pyc ...
    99+
    2023-01-31
    学习笔记 模块 python
  • Python学习笔记5—Python模块
        python模块分为系统内置的模块、第三方的模块和用户编写的模块    默认情况下,python第三方的模块安装在python 的安装目录下site-packages下,以文件或者目录的形式存放    用户模块,程序模块化对区分功能...
    99+
    2023-01-31
    学习笔记 模块 Python
  • Python学习笔记之json模块和pickle模块
    目录json模块序列化与反序列化json模块中的方法pickle模块总结json模块 json用于不同语言之间的数据交换,比如C和Python之间等等,即可跨语言。而pickle只能...
    99+
    2023-05-18
    json模块 pickle模块 python各个模块讲解
  • Python学习笔记:json模块和pi
    Python中的json模块和pickle都是用于数据的序列化和反序列化,它们提供的方法也是一样的:dumps,dump,loads,load dumps(obj):将对象序列化为str。 dump(obj, fp):将对象序列化为...
    99+
    2023-01-30
    学习笔记 模块 Python
  • Python学习笔记7——文本、模块
    参考书籍:《Learning_Python_5th_Edition.pdf》,一本英文书呢,我上传到百度网盘吧,请点击这里,密码是:kym3 文本文件的输入输出 Python具有基本的文本文件读写功能。Python的标准库提供有更丰富的读...
    99+
    2023-01-30
    学习笔记 模块 文本
  • Python3学习笔记(urllib模块
    1.基本方法urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)-    ...
    99+
    2023-01-31
    学习笔记 模块 urllib
  • Nodejs学习笔记之Stream模块
    一,开篇分析 流是一个抽象接口,被 Node 中的很多对象所实现。比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流。流是可读,可写或兼具两者的。 最早接触Stream是从早期的unix开...
    99+
    2022-06-04
    学习笔记 模块 Nodejs
  • Nodejs学习笔记之NET模块
    一,开篇分析 从今天开始,我们来深入具体的模块学习,这篇文章是这个系列文章的第三篇,前两篇主要是以理论为主,相信大家在前两篇的学习中, 对NodeJS也有一个基本的认识,没事!!!趁热打铁,让我们继续将No...
    99+
    2022-06-04
    学习笔记 模块 Nodejs
  • NodeJS学习笔记之Http模块
    一,开篇分析 首先“Http”这个概念大家应该比较熟悉了,它不是基于特定语言的,是一个通用的应用层协议,不同语言有不同的实现细节,但是万变不离其宗,思想是相同的, NodeJS作为一个宿主运行环境,以Jav...
    99+
    2022-06-04
    学习笔记 模块 NodeJS
  • NodeJS学习笔记之MongoDB模块
    一,开篇分析 这篇属于扩展知识篇,因为在下面的文章中会用到数据库操作,所以今天就来说说它(Mongodb模块)。 (1),简介 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WE...
    99+
    2022-06-04
    学习笔记 模块 NodeJS
  • Python中shutil模块的学习笔记教程
    介绍 shutil 名字来源于 shell utilities,有学习或了解过Linux的人应该都对 shell 不陌生,可以借此来记忆模块的名称。该模块拥有许多文件(夹)操作的功能,包括复制、移动、重命名...
    99+
    2022-06-04
    学习笔记 模块 教程
  • 周末学习笔记——day03(模块,包)
    一,复习 ''' 装饰器 @wraper # fn = wraper(fn) def fn(): pass def wrap(arg): def outer(func): # 可以用arg d...
    99+
    2023-01-31
    学习笔记 模块 周末
  • Node.js中的模块机制学习笔记
    Javascript自诞生以来,曾经没有人拿它当做一门编程语言。在Web 1.0时代,这种脚本语言主要被用来做表单验证和网页特效。直到Web 2.0时代,前端工程师利用它大大提升了网页上的用户体验,JS才被...
    99+
    2022-06-04
    学习笔记 模块 机制
  • NodeJS学习笔记之FS文件模块
    一,开篇分析 文件系统模块是一个简单包装的标准 POSIX 文件 I/O 操作方法集。可以通过调用 require("fs") 来获取该模块。文件系统模块中的所有方法均有异步和同步版本。 (1),文件系统模...
    99+
    2022-06-04
    学习笔记 模块 文件
  • NodeJS学习笔记之(Url,QueryString,Path)模块
    一,开篇分析 这篇文章把这三个模块拿来一起说,原因是它们各自的篇幅都不是很长,其次是它们之间存在着依赖关系,所以依次介绍并且实例分析。废话不多说了,请看下面文档: (1),"Url模块"   来个小栗子:...
    99+
    2022-06-04
    学习笔记 模块 NodeJS
  • Python学习笔记:单例模式
    单例模式:一个类无论实例化多少次,返回的都是同一个实例,例如:a1=A(), a2=A(), a3=A(),a1、a2和a3其实都是同一个对象,即print(a1 is a2)和print(a2 is a3)都会打印True。 实现方式:...
    99+
    2023-01-30
    学习笔记 模式 Python
  • Python学习笔记
    Python介绍 Python是一种解释型、面向对象的语言。 官网:www.python.org Python环境 解释器:www.python.org/downloads 运行方式: 交互模式。在IDLE中运行。 脚本模式。文件的后缀...
    99+
    2023-01-30
    学习笔记 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作