2011-09-13 3 views
2

existant Fondamentalement, je besoin de copier tous les fichiers d'un certain type dans un dossier dans un fichier zip au plus haut niveau (donc pas dans un dossier)Python - os.walk certains types de fichiers dans un ZipFile

Par exemple, je avoir un dossier, «un dossier» et dans ce dossier sont un chargement de fichiers .png. Je veux copier tous ces fichiers dans un fichier ZipFile existant. À l'heure actuelle, je peux seulement obtenir le dossier pour copier aussi bien, donc je finis avec 'ZipFile\A Folder\lots of .pngs' plutôt que 'ZipFile\lots of .pngs'

Le code que je utilise pour déplacer les fichiers et le dossier est:

for root, dirs, files in os.walk('A Folder'): 
       for f in files: 
        fname = os.path.join(root, f) 
        myzip.write(fname) 

Une autre chose rapide, Si je peux poser une autre question, comment procéderiez-vous à la suppression d'un dossier à l'intérieur d'un ZipFile?

Espérons que c'est assez clair,

Merci beaucoup!

Répondre

2

Selon les docs de python, la méthode zipfile.write() prend en charge un second argument qui est le nom de la destination (à savoir le nom dans l'archive), essayez TTO l'utiliser comme ceci:

for root, dirs, files in os.walk('A Folder'): 
    for f in files: 
     fname = os.path.join(root, f) 
     new_path = os.path.normpath(fname.replace('A Folder', '')) 
     myzip.write(fname, new_path) 
+0

C'est fantastique, merci beaucoup! Je ne savais pas que vous pourriez hasarder la destination des archives, exactement ce que je voulais, merci. Le seul problème est que si vous l'exécutez une seconde fois, il n'écrase pas les fichiers, il en ajoute simplement une autre copie, je vais y jeter un coup d'oeil. Merci encore – Artharos

Questions connexes