Python et les fichiers zip¶
Il existe dans python le module zipfile pour gérer les fichiers zip
test de fichier zip¶
import zipfile
for filename in [ 'README.txt', 'example.zip',
'bad_example.zip', 'notthere.zip' ]:
print '%20s %s' % (filename, zipfile.is_zipfile(filename))
$ python zipfile_is_zipfile.py
README.txt False
example.zip True
bad_example.zip False
notthere.zip False
lecture des méta-data¶
import zipfile
zf = zipfile.ZipFile('example.zip', 'r')
print zf.namelist()
$ python zipfile_namelist.py
['README.txt']
ou
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')
extraire une archive zip¶
import zipfile
zf = zipfile.ZipFile('example.zip')
for filename in [ 'README.txt', 'notthere.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
$ 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
Pour extraire une archive complète
with zipfile.ZipFile("myfile.zip", "r") as z:
z.extractall("my_dir")
créer une archive zip¶
from zipfile_infolist import print_info
import zipfile
print 'creating archive'
zf = zipfile.ZipFile('zipfile_write.zip', mode='w')
try:
print 'adding README.txt'
zf.write('README.txt')
finally:
print 'closing'
zf.close()
print
print_info('zipfile_write.zip')
$ python zipfile_write.py
creating archive
adding README.txt
closing
README.txt
Comment:
Modified: 2007-12-16 10:08:50
System: 3 (0 = Windows, 3 = Unix)
ZIP version: 20
Compressed: 75 bytes
Uncompressed: 75 bytes
ou plus simple
myzip = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED)
myzip.write(xls_file)
myzip.close()