web-dev-qa-db-fra.com

python zipfile ne semble pas compresser mes fichiers

J'ai fait une petite fonction d'aide:

import zipfile

def main(archive_list=[],zfilename='default.Zip'):
    print zfilename
    zout = zipfile.ZipFile(zfilename, "w")
    for fname in archive_list:
        print "writing: ", fname
        zout.write(fname)
    zout.close()

if __name__ == '__main__':
    main()  

Le problème est que tous mes fichiers ne sont PAS COMPRIMÉS! Les fichiers sont de la même taille et, en fait, seule l'extension est modifiée en ".Zip" (de ".xls" dans ce cas).

J'exécute python 2.5 sur winXP sp2.

66
Ramy

En effet, ZipFile vous oblige à spécifier la méthode de compression. Si vous ne le spécifiez pas, il suppose que la méthode de compression est zipfile.Zip_STORED, qui stocke uniquement les fichiers sans les compresser. Vous devez spécifier la méthode à zipfile.Zip_DEFLATED. Vous aurez besoin d'avoir le module zlib installé pour cela (il est généralement installé par défaut).

import zipfile

def main(archive_list=[],zfilename='default.Zip'):
    print zfilename
    zout = zipfile.ZipFile(zfilename, "w", zipfile.Zip_DEFLATED) # <--- this is the change you need to make
    for fname in archive_list:
        print "writing: ", fname
        zout.write(fname)
    zout.close()

if __== '__main__':
    main()  
117
Chinmay Kanchi

Il existe un moyen très simple de compresser le format Zip,

Utiliser dans shutil.make_archive bibliothèque.

Par exemple:

import shutil

shutil.make_archive(file_name, 'Zip', file location after compression)

Peut voir une documentation plus complète à: ici

7
Gavriel Cohen