Twisted与zip压缩

在Twisted中对于zip的压缩提供了2个模块:

  • zippath, 压缩包文件信息
  • zipstream, 压缩包流

而在Python版本2.6及之后,引入了增量解压的方式,而在之前是不支持的。
首先我们来简单的看下zippath模块,通过该模块我们可以得到压缩包文件的一些信息,比如访问的时间、修改的时间等。

from twisted.python import zippath  
z = zippath.ZipArchive('debian.zip')  
print(z.getAccessTime)  
print(z.getModificationTime)

实际上其内部主要是调用twisted.python.filepath.FilePath来实现访问的。
下面我们主要来看zipstream模块,该模块提供了压缩流的方式对zip压缩文件的支持,当然该模块仅限读取操作,对于创建压缩包并没有提供任何的支持。
比较有用的几个函数或类如下:

  • ChunkingZipFile
  • unzipIterChunky
  • countZipFileChunks

下面我们分别进行介绍。
对于ChunkingZipFile类,我们可以传入1个压缩包的名称:

from twisted.python import zipstream  

d = zipstream.ChunkingZipFile('group.zip')

之后我们指定要读取的压缩包中文件的名称,需要注意的是这里使用的必须是文件路径的写法,如果存在目录的话,记得添加上斜杠才能正常的被识别,比如test/
在上述压缩包中有1个group.txt的文件,现在我们想获取其内容,我们可以这样操作:

print(d.readfile('group.txt').read())

我们调用该类的readfile方法指定文件的名称,之后调用其read方法进行读取。而在这个过程会根据压缩包的类型,自动调用不同的压缩方式进行读取。
接着是unzipIterChunky类,主要用于对1个压缩包进行解压到指定的目录,默认是当前目录。我们可以这样来操作:

zipstream.unzipIterChunky('group.zip','/home/dog/tmp')

需要注意的是,其返回的结果是1个生成器,因此我们必须进行迭代会有目录被创建并进行解压。
最后的countZipFileChunks方法,主要用于计算按照指定的块大小,需要将压缩包切分为多少块的大小,比如:

print(zipstream.countZipFileChunks('group.zip',200)) #12  
print(zipstream.countZipFileChunks('group.zip',2048)) # 1

它将根据每个文件的大小的和来计算最终的块的大小。

若文章对您有帮助,请打赏1块钱。您的支持,可以让我分享更多精彩的文章。转载请注明来源


知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。