Python/Zip

pkzip
Test if zip file is valid if zipfile.is_zipfile(zfilename):
 * 1) test if the file is a valid pkzip file

import zipfile zfile = zipfile.ZipFile( zfilename, "r" ) zfile.extractall
 * 1) Extract all:

import zipfile zfile = zipfile.ZipFile( zfilename, "r" ) print "Simple file information retrieval:" zfile.printdir zfile.close
 * 1) open a zip file and show information

zin = zipfile.ZipFile(zfilename, "r") strz = zin.read(arc_name) zin.close
 * 1) read the zipped file back in ...

Show archive information: 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('example.zip')

References:
 * Compress Files with Zip (Python) | DaniWeb - http://www.daniweb.com/software-development/python/code/216859/compress-files-with-zip-python
 * zipfile – Read and write ZIP archive files - Python Module of the Week - http://www.doughellmann.com/PyMOTW/zipfile/

Extract
import zipfile import os.path zfile = zipfile.ZipFile("test.zip") for name in zfile.namelist: (dirname, filename) = os.path.split(name) print "Decompressing " + filename + " on " + dirname if not os.path.exists(dirname): os.mkdir(dirname) fd = open(name,"w") fd.write(zfile.read(name)) fd.close

My modifications: import zipfile import os.path zfile = zipfile.ZipFile("test.zip") for name in zfile.namelist: (dirname, filename) = os.path.split(name) print "Decompressing " + name if dirname and not os.path.exists(dirname): os.mkdir(dirname) if filename: fd = open(name,"w") fd.write(zfile.read(name)) fd.close

---

import os from zipfile import ZipFile, ZipInfo

class ZipCompat(ZipFile): def __init__(self, *args, **kwargs): ZipFile.__init__(self, *args, **kwargs)

def extract(self, member, path=None, pwd=None): if not isinstance(member, ZipInfo): member = self.getinfo(member) if path is None: path = os.getcwd return self._extract_member(member, path)

def extractall(self, path=None, members=None, pwd=None): if members is None: members = self.namelist for zipinfo in members: self.extract(zipinfo, path)

def _extract_member(self, member, targetpath): if (targetpath[-1:] in (os.path.sep, os.path.altsep)           and len(os.path.splitdrive(targetpath)[1]) > 1): targetpath = targetpath[:-1] if member.filename[0] == '/': targetpath = os.path.join(targetpath, member.filename[1:]) else: targetpath = os.path.join(targetpath, member.filename) targetpath = os.path.normpath(targetpath) upperdirs = os.path.dirname(targetpath) if upperdirs and not os.path.exists(upperdirs): os.makedirs(upperdirs) if member.filename[-1] == '/': if not os.path.isdir(targetpath): os.mkdir(targetpath) return targetpath target = file(targetpath, "wb") try: target.write(self.read(member.filename)) finally: target.close return targetpath

def unzip(path): zfile = zipfile.ZipFile(path) for name in zfile.namelist: (dirname, filename) = os.path.split(name) if filename == '': # directory if not os.path.exists(dirname): os.mkdir(dirname) else: # file fd = open(name, 'w') fd.write(zfile.read(name)) fd.close zfile.close
 * 1) unzip a file

References:
 * How to unzip a zip file with Python 2.4? - Stack Overflow - http://stackoverflow.com/questions/7806563/how-to-unzip-a-zip-file-with-python-2-4

Compress
help: pydoc zipfile

import zipfile str1 = """There is no ham in hamburger.""" arc_name = "English101.txt" zfilename = "English101.zip" zout = zipfile.ZipFile(zfilename, "w") zout.writestr(arc_name, str1) zout.close


 * 1) append file:
 * 2) zf = zipfile.ZipFile('zipfile_append.zip', mode='a')

zf = zipfile.ZipFile('zipfile_write.zip', mode='w') try: print 'adding README.txt' zf.write('README.txt') # alternate name: # zf.write('README.txt', arcname='NOT_README.txt') finally: print 'closing' zf.close

WARNING: By default, the contents of the archive are not compressed! To add compression, the zlib module is required. If zlib is available, you can set the compression mode for individual files or for the archive as a whole using zipfile.ZIP_DEFLATED. The default compression mode is zipfile.ZIP_STORED.

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 README.txt with compression mode', modes[compression] zf.write('README.txt', compress_type=compression) finally: print 'closing' zf.close

References:
 * Compress Files with Zip (Python) | DaniWeb - http://www.daniweb.com/software-development/python/code/216859/compress-files-with-zip-python
 * zipfile – Read and write ZIP archive files - Python Module of the Week - http://www.doughellmann.com/PyMOTW/zipfile/