2011-09-15 3 views

Répondre

3

Je pense que ce n'est pas possible: les modules zipfile n'ont pas de méthodes pour cela, et comme mentionné dans Renaming a File/Folder inside a Zip File in Java? la structure interne des fichiers zip est dans le chemin. Donc, vous devez faire unzip, renommer, zip.

Mise à jour: Juste trouvé Delete file from zipfile with the ZipFile Module qui devrait vous aider.

+0

ok, comment supprimer un répertoire dans le dossier zip? – user715578

+0

la suppression peut être faite avec os.rmdir de shutil.rmtree, mais si vous voulez seulement renommer un dossier, nous pouvons utiliser shutil.move – rocksportrocker

+0

en fait, comment supprimer un fichier dans le dossier zip? – user715578

2

Comme mentionné par rocksportrocker, vous ne pouvez pas renommer/supprimer un fichier d'une archive zipfile. Vous auriez parcouru les fichiers dans le fichier zip et ajouté sélectivement les fichiers que vous voulez. Donc, pour supprimer un certain répertoire du fichier zip, vous ne les copiez pas dans le nouveau fichier zip. Ce serait quelque chose comme ceci:

source = ZipFile('source.zip', 'r') 
target = ZipFile('target.zip', 'w', ZIP_DEFLATED) 
for file in source.filelist: 
    if not file.filename.startswith('directory-to-remove/'): 
     target.writestr(file.filename, source.read(file.filename)) 
target.close() 
source.close() 

Comme ce lirait tous les fichiers en mémoire, il ne serait pas une solution idéale pour les grandes archives. Pour les petites archives cela fonctionne comme annoncé.

+0

Charge-t-il vraiment tout le fichier en mémoire? – swdev

Questions connexes