Python: récupérer des fichiers dans une archive sans l'annuaire?
J'ai été l'apprentissage de python pour environ 3 semaines maintenant, et je suis en train d'essayer d'écrire un petit script pour trier les fichiers (environ 10.000), par mots clés, date apparaissant dans le nom de fichier. Les fichiers avant une date donnée doit être ajouté à l'archive. Le tri fonctionne très bien, mais pas l'archivage
Il crée une archive - le nom est très bien - mais dans l'archive est le chemin d'accès complet aux fichiers.
Si je l'ouvre, ça ressemble: folder1 -> folder2 -> folder3 -> files
.
Comment puis-je changer pour que l'archive ne contient que les fichiers et non pas l'ensemble de la structure?
Ci-dessous est un extrait avec mon zip fonction, node
est le chemin où les fichiers ont été avant le tri, folder
est un sous-dossier avec les fichiers triés par un mot clé dans le nom, items
sont les dossiers avec les fichiers triés par date.
Je suis à l'aide de Python 2.6
def ZipFolder(node, zipdate):
xynode = node + '/xy'
yznode = node + '/yz'
for folder in [xynode,yznode]:
items = os.listdir(folder)
for item in items:
itemdate = re.findall('(?<=_)\d\d\d\d-\d\d', item)
print item
if itemdate[0] <= zipdate:
arcname = str(item) + '.zip'
x = zipfile.ZipFile(folder + '/' + arcname, mode='w', compression = zipfile.ZIP_DEFLATED)
files = os.listdir(folder + '/' + item)
for f in files:
x.write(folder + '/' + item + '/' + f)
print 'writing ' + str(folder + '/' + item + '/' + f) + ' in ' + str(item)
x.close()
shutil.rmtree(folder + '/' + item)
return
Je suis également ouvert à toutes suggestions et améliorations.
OriginalL'auteur rny | 2011-08-10
Vous devez vous connecter pour publier un commentaire.
De l'aide(zipfile):
Donc, essayez de changer votre write() avec:
Au sujet de votre code, il me semble assez bon, surtout pour un 3 semaine pythonist, bien que quelques commentaires auraient été les bienvenus 😉
génial, ça fonctionne, merci pour l'aide rapide.
Hudec: avec docstring vous dire qqch comme ceci: def ZipFolder(nœud, zipdate): """compresse les fichiers datant de plus de zipdate" dans les sous-dossiers de "nœud""""
Se débarrasser de cette vilaine rejoindre. x.écrire(un dossier, un élément de f, arcname = f, sep='/')
Alors que @Springfield est techniquement incorrect, il semble qu'il serait plus correct d'utiliser:
x.write(os.path.join(folder,item,f),arcname=f)
.OriginalL'auteur