zipfile

  1. zip文件格式是通用的文档压缩标准,在ziplib模块中,使用ZipFile类来操做zip文件,下面具体介绍一下:python

    class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]]).net

     建立一个ZipFile对象,表示一个zip文件。参数file表示文件的路径或类文件对象(file-like object);参数mode指示打开zip文件的模式,默认值为'r',表示读已经存在的zip文件,也能够为'w'或'a','w'表示新建一个 zip文档或覆盖一个已经存在的zip文档,'a'表示将数据附加到一个现存的zip文档中。参数compression表示在写zip文档时使用的压缩 方法,它的值能够是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。若是要操做的zip文件大小超过2G,应该将allowZip64设置为True。code

      ZipFile还提供了以下经常使用的方法和属性:对象

    ZipFile.getinfo(name):
    获取zip文档内指定文件的信息。返回一个zipfile.ZipInfo对象,它包括文件的详细信息。将在下面 具体介绍该对象。blog

    ZipFile.infolist() 获取zip文档内全部文件的信息,返回一个zipfile.ZipInfo的列表。ip

    ZipFile.namelist() 获取zip文档内全部文件的名称列表。资源

    ZipFile.extract(member[, path[, pwd]])文档

      将zip文档内的指定文件解压到当前目录。参数member指定要解压的文件名称或对应的ZipInfo对象;参数path指定了解析文件保存的文件夹;参数pwd为解压密码。下面一个例子将保存在程序根目录下的txt.zip内的全部文件解压到D:/Work目录:get

import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))
for file in zipFile.namelist():
zipFile.extract(file, r'd:/Work')
zipFile.close() import zipfile, os zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip')) for file in zipFile.namelist(): zipFile.extract(file, r'd:/Work') zipFile.close()博客

ZipFile.extractall([path[, members[, pwd]]])   解压zip文档中的全部文件到当前目录。参数members的默认值为zip文档内的全部文件名称列表,也能够本身设置,选择要解压的文件名称。

  1. ZipFile.printdir() 将zip文档内的信息打印到控制台上。

    ZipFile.setpassword(pwd) 设置zip文档的密码。

    ZipFile.read(name[, pwd])
    获取zip文档内指定文件的二进制数据。下面的例子演示了read()的使用,zip文档内包括一个txt.txt的文本文件,使用read()方法读取其二进制数据,而后保存到D:/txt.txt。

#coding=gbk
import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))
data = zipFile.read('txt.txt')
(lambda f, d: (f.write(d), f.close()))(open(r'd:/txt.txt', 'wb'), data) #一行语句就完成了写文件操做。仔细琢磨哦~~
zipFile.close() #coding=gbk import zipfile, os zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip')) data = zipFile.read('txt.txt') (lambda f, d: (f.write(d), f.close()))(open(r'd:/txt.txt', 'wb'), data) #一行语句就完成了写文件操做。仔细琢磨哦~
~ zipFile.close()

ZipFile.write(filename[, arcname[, compress_type]])   将指定文件添加到zip 文档中。filename为文件路径,arcname为添加到zip文档以后保存的名称, 参数compress_type表示压缩方法,它的值能够是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。下面的例子演示了如何建立一个zip文档,并将文件D:/test.doc添加到压缩文档中。

import zipfile, os
zipFile = zipfile.ZipFile(r'D:/test.zip'), 'w')
zipFile.write(r'D:/test.doc', 'ok.doc', zipfile.ZIP_DEFLATED)
zipFile.close() import zipfile, os zipFile = zipfile.ZipFile(r'D:/test.zip'), 'w') zipFile.write(r'D:/test.doc', 'ok.doc', zipfile.ZIP_DEFLATED) zipFile.close()

ZipFile.writestr(zinfo_or_arcname, bytes) writestr()支持将二进制数据直接写入到压缩文档。

  1. Class ZipInfo ZipFile.getinfo(name) 方法返回的是一个ZipInfo对象,表示zip文档中相应文件的信息。它支持以下属性:

    ZipInfo.filename: 获取文件名称。

    ZipInfo.date_time: 获取文件最后修改时间。返回一个包含6个元素的元组:(年, 月, 日, 时, 分, 秒)

    ZipInfo.compress_type: 压缩类型。

    ZipInfo.comment: 文档说明。

    ZipInfo.extr: 扩展项数据。

    ZipInfo.create_system: 获取建立该zip文档的系统 。 ZipInfo.create_version: 获取 建立zip文档的PKZIP版本。

    ZipInfo.extract_version: 获取 解压zip文档所需的PKZIP版本。

    ZipInfo.reserved: 预留字段,当前实现老是返回0。

    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: 获取未压缩的文件大小。

下面一个简单的例子说明这些属性的意思:

  1. import zipfile, os

    zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))

    zipInfo = zipFile.getinfo('doc.doc')

    print 'filename:', zipInfo.filename

    print 'date_time:', zipInfo.date_time

    print 'compress_type:', zipInfo.compress_type

    print 'comment:', zipInfo.comment

    print 'extra:', zipInfo.extra

    print 'create_system:', zipInfo.create_system

    print 'create_version:', zipInfo.create_version

    print 'extract_version:', zipInfo.extract_version

    print 'extract_version:', zipInfo.reserved

    print 'flag_bits:', zipInfo.flag_bits

    print 'volume:', zipInfo.volume

    print 'internal_attr:', zipInfo.internal_attr

    print 'external_attr:', zipInfo.external_attr

    print 'header_offset:', zipInfo.header_offset

    print 'CRC:', zipInfo.CRC

    print 'compress_size:', zipInfo.compress_size

    print 'file_size:', zipInfo.file_size

    zipFile.close()

    import zipfile, os

    zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))

    zipInfo = zipFile.getinfo('doc.doc')

    print 'filename:', zipInfo.filename

    print 'date_time:', zipInfo.date_time

    print 'compress_type:', zipInfo.compress_type

    print 'comment:', zipInfo.comment

    print 'extra:', zipInfo.extra

    print 'create_system:', zipInfo.create_system

    print 'create_version:', zipInfo.create_version

    print 'extract_version:', zipInfo.extract_version

    print 'extract_version:', zipInfo.reserved

    print 'flag_bits:', zipInfo.flag_bits

    print 'volume:', zipInfo.volume

    print 'internal_attr:', zipInfo.internal_attr

    print 'external_attr:', zipInfo.external_attr

    print 'header_offset:', zipInfo.header_offset

    print 'CRC:', zipInfo.CRC

    print 'compress_size:', zipInfo.compress_size

    print 'file_size:', zipInfo.file_size

    zipFile.close()

  感受使用zipfile模块来处理zip文件真的很简单。想当初在.NET平台下,使用sharpziplib压缩、解压一个文件,我花了N多 时间,找了N多英文资源,才写出一个能压缩文件的demo。而如今使用Python,经过阅读python手册,一两个小时就掌握了zipfile模块的 基本使用。哈哈,使用Python,真爽!

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/JGood/archive/2009/07/15/4351911.aspx

================ Python 解压缩zip文件 2010-01-28 16:11

import zipfile

def unzip(): zip_path="c://a.zip" save_path = "c://a" zipfile.ZipFile(zip_path).extractall(save_path)

ZipFile里有两个很是重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的状况下,咱们只须要使用这两个class就能够了。ZipFile是主要的类,用来建立和读取zip文件而ZipInfo是存储的zip文件的每一个文件的信息的。

好比要读取一个Python ZipFile模块,这里假设filename是一个文件的路径:

import ZipFile  
z = ZipFile.ZipFile(filename, 'r')  # 这里的第二个参数用r表示是读取zip文件,w是建立一个zip文件  
for f in z.namelist():  
print f

上面的代码是读取一个zip压缩包里全部文件的名字。z.namelist() 会返回压缩包内全部文件名的列表。

再看看下面一个:

import ZipFile  
z = ZipFile.ZipFile(filename, 'r')  
for i in z.infolist():  
print i.file_size, i.header_offset

这里使用了z.infolist(), 它返回的就是压缩包内全部文件的信息,就是 一个ZipInfo的列表。一个ZopInfo对象中包含了压缩包内一个文件的信息,其中比较经常使用的是 filename, file_size, header_offset, 分别为文件名,文件大小,文件数据在压缩包中的偏移。其实以前的z.namelist()就是读取的ZopInfo中的filename,组成一个 list返回的。 从压缩包里解压缩出一个文件的方法是使用ZipFile的read方法:

import ZipFile  
z = ZipFile.ZipFile(filename, 'r')  
print z.read(z.namelist()[0])

这样就读取出z.namelist()中的第一个文件,而且输出到屏幕,固然也能够把它存储到文件。

下面是建立zip压缩包的方法:

与读取的方法其实很相似的:

import ZipFile, os  
z = ZipFile.ZipFile(filename, 'w')  # 注意这里的第二个参数是w,这里的filename是压缩包的名字

假设要把一个叫testdir中的文件所有添加到压缩包里(这里只添加一级子目录中的文件):

if os.path.isdir(testdir):  
for d in os.listdir(testdir):  
z.write(testdir+os.sep+d)  
# close() 是必须调用的!  
z.close()

上面的代码很是的简单。想一想还有一个问题,若是我把一个test/111.txt 添加到压缩包里以后我但愿在包里它放到test22/111.txt怎么办呢?其实这个就是Python ZipFile模块的write方法中第二个参数的做用了。只须要这样调用:

z.write("test/111.txt", "test22/111.txt")

以上就是咱们为你们介绍的有关Python ZipFile模块的相关知识。

=============== 从简单的角度来看的话,zip格式会是个不错的选择,并且python对zip格式的支持够简单,够好用。 1)简单应用 若是你仅仅是但愿用python来作压缩和解压缩,那么就不用去翻文档了,这里提供一个简单的用法,让你一看就能明白。 import zipfile f = zipfile.ZipFile('filename.zip', 'w' ,zipfile.ZIP_DEFLATED) f.write('file1.txt') f.write('file2.doc') f.write('file3.rar') f.close() f.zipfile.ZipFile('filename') f.extractall() f.close() 不知道上面的例子是否是足够简单呢?

  1. 1.1 zipfile.ZipFile(fileName[, mode[, compression[, allowZip64]]]) fileName是没有什么疑问的了。

    mode和通常的文件操做同样,'r'表示打开一个存在的只读ZIP文件;'w'表示清空并打开一个只写的ZIP文件,或建立一个只写的ZIP文件;'a'表示打开一个ZIP文件,并添加内容。

    compression表示压缩格式,可选的压缩格式只有2个:ZIP_STORE;ZIP_DEFLATED。ZIP_STORE是默认的,表示不压缩;ZIP_DEFLATED表示压缩,若是你不知道什么是Deflated,那么建议你去补补课。

    allowZip64为True时,表示支持64位的压缩,通常而言,在所压缩的文件大于2G时,会用到这个选项;默认状况下,该值为False,由于Unix系统不支持。

    1.2 zipfile.close()

    说真的,这个没什么可说的,若是有的话,那就是你写入的任何文件在关闭以前不会真正写入磁盘。

    1.3 zipfile.write(filename[, arcname[, compress_type]])

    acrname是压缩文件中该文件的名字,默认状况下和filename同样

    compress_type的存在是由于zip文件容许被压缩的文件能够有不一样的压缩类型。

    1.4 zipfile.extractall([path[, member[, password]]])

    path解压缩目录,没什么可说的

    member须要解压缩的文件名儿列表

    password当zip文件有密码时须要该选项

    对于简单的应用,这么多就够了。 2)高级应用

    2.1 zipfile.is_zipfile(filename)

    判断一个文件是否是压缩文件

    2.2 ZipFile.namelist() 返回文件列表

    2.3 ZipFile.open(name[, mode[, password]])打开压缩文档中的某个文件

    2.4 ZipFile.infolist()

    2.5 ZipFile.getinfo(name)

    上述文件返回ZipInfo对象,只不过一个返回的是列表,一个返回的是一个ZipInfo

    ZipInfo类

    2.6 ZipInfo.filename

    2.7 ZipInfo.date_time

    返回值的格式为(year,month,date,hour,minute,second)

    2.8 ZipInfo.compress_type

    2.9 ZipInfo.comment

    2.10ZipInfo.extra

    2.11ZipInfo.create_system

    2.12ZipInfo.extract_version

    2.13ZipInfo.reserved 老是0

    2.14ZipInfo.flag_bits

    2.15ZipInfo.volume

    2.16ZipInfo.internal_attr

    2.17ZipInfo.external_attr

    2.18ZipInfo.header_offset

    2.19ZipInfo.CRC

    2.20ZipInfo.file_size

    2.21ZipInfo.compress_size

    2.22ZipFile.testzip()

    检查每一个文件和它对应的CRC,若是有错误返回对应的文件列表

    2.23ZipFile.setpassword(password)

    2.24ZipFile.read(name[,password])

    返回对应的文件

    2.25ZipFile.printdir()

    打印压缩文件夹的信息

    2.26ZipFile.writestr(zipinfo_or_arcname, bytes)

    PyZipFile类

    zipfile.PyZipFile除了上面的方法和属性以外,还有一个特殊的方法

    2.27PyZipFile.writepy(pathname,basename)

    通常状况下,仅仅压缩.pyc和.pyo文件,不压缩.py文件


  1. zip文件格式信息

    一个 ZIP 文件由三个部分组成:压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志

    1)压缩源文件数据区

    在这个数据区中每个压缩的源文件/目录都是一条记录,记录的格式以下: [文件头+ 文件数据 + 数据描述符]

       a、文件头结构

       组成 长度

       文件头标记 4 bytes (0x04034b50)

       解压文件所需 pkware 版本 2 bytes

       全局方式位标记 2 bytes

       压缩方式 2 bytes

       最后修改文件时间 2 bytes

       最后修改文件日期 2 bytes

       CRC-32校验 4 bytes

       压缩后尺寸 4 bytes

       未压缩尺寸 4 bytes

       文件名长度 2 bytes

       扩展记录长度 2 bytes

       文件名 (不定长度)

       扩展字段 (不定长度)       b、文件数据       c、数据描述符

      组成 长度

       CRC-32校验 4 bytes

       压缩后尺寸 4 bytes

       未压缩尺寸 4 bytes

      这个数据描述符只在全局方式位标记的第3位设为1时才存在(见后详解),紧接在压缩数据的最后一个字节后。这个数据描述符只用在不能对输出的 ZIP 文件进行检索时使用。例如:在一个不能检索的驱动器(如:磁带机上)上的 ZIP 文件中。若是是磁盘上的ZIP文件通常没有这个数据描述符。    2)压缩源文件目录区

       在这个数据区中每一条纪录对应在压缩源文件数据区中的一条数据

       组成 长度

       目录中文件文件头标记 4 bytes (0x02014b50)

       压缩使用的pkware 版本 2 bytes

       解压文件所需 pkware 版本 2 bytes

       全局方式位标记 2 bytes

       压缩方式 2 bytes

       最后修改文件时间 2 bytes

       最后修改文件日期 2 bytes

       CRC-32校验 4 bytes

       压缩后尺寸 4 bytes

       未压缩尺寸 4 bytes

       文件名长度 2 bytes

       扩展字段长度 2 bytes

       文件注释长度 2 bytes

       磁盘开始号 2 bytes

       内部文件属性 2 bytes

       外部文件属性 4 bytes

       局部头部偏移量 4 bytes

       文件名 (不定长度)

       扩展字段 (不定长度)

       文件注释 (不定长度)

3)压缩源文件目录结束标志

组成 长度

   目录结束标记 4 bytes (0x02014b50)

   当前磁盘编号 2 bytes

   目录区开始磁盘编号 2 bytes

   本磁盘上纪录总数 2 bytes

   目录区中纪录总数 2 bytes

   目录区尺寸大小 4 bytes

   目录区对第一张磁盘的偏移量 4 bytes

   ZIP 文件注释长度 2 bytes

   ZIP 文件注释 (不定长度)

相关文章
相关标签/搜索