| Manipulation de fichiers ZIP |
UserPreferences |
| Wiki Python Fr | FrontPage | RecentChanges | TitleIndex | WordIndex | SiteNavigation | HelpContents | moin.sf.net |
Zipper un fichier:
1 2 3 4 | import zipfile
f = zipfile.ZipFile('archive.zip','w',zipfile.ZIP_DEFLATED)
f.write('fichier_a_ajouter.dat')
f.close() |
Remplcez 'w' par 'a' pour ajouter des fichiers à l'archive zip.
Dézipper tous les fichiers d'une archive zip:
1 2 3 4 5 6 7 | import zipfile
zfile = zipfile.ZipFile('archive.zip','r')
for filename in zfile.namelist():
data = zfile.read(filename)
file = open(filename, 'w+b')
file.write(data)
file.close() |
Voici un petit module, pour pouvoir manipuler des fichiers compressés au format .ZIP, en invite de commande.
C'est aussi un exemple d'utilisation des modules de la librairie standard de Python : zlib & zipfile
Mais, la librairie standard, on s'aperçoit que l'ajout de fichier 'ajoute' vraiment, sans tenir compte de l'existence préalable du fichier. On peut se retrouver ainsi avec deux, ou plus, occurrences d'un même fichier. De même, ni la mise à jour (update), ni la suppression de fichier ne sont prévus.
J'ai essayé de remédier à ces points :
- suppression d'un fichier ;
- 'update' (remplacement d'un fichier, par un plus récent).
Comme le code-source est un peu long, il me semble préférable de mettre un lien :
Le code a été testé avec Python 2.3 et Python 2.4, sous windows (2K et XP).
Le format tar.bz2 est généralement plus compact que le format .zip
Python peut nativement lire et écrire ce format.
Compresser un répertoire complet en .tar.bz2:
1 2 3 4 5 6 | import tarfile
import bz2
archive = tarfile.open('monarchive.tar.bz2','w:bz2')
archive.debug = 1 # Affiche les fichiers en cours de compression
archive.add(r'd:\Mes documents') # d:\Mes documents contient les fichiers à compresser
archive.close() |
Décompresser une archive .tar.bz2:
1 2 3 4 5 6 7 | import tarfile
import bz2
archive = tarfile.open('monarchive.tar.bz2','r:bz2')
archive.debug = 1 # Affiche les fichiers en cours de décompression
for tarinfo in archive:
archive.extract(tarinfo, r'd:\monrepertoire') # d:\monrepertoire est l'endroit où on veut décompresser les fichiers.
archive.close() |