Comment créer une archive zip avec le nom du répertoire en début
d'archive ?
Le problème est le suivant :
- je reçois une archive a.zip, que je décompresse avec zipfile.
Cette archive contient, en premier, le nom du répertoire dans lequel
décompresser l'archive.
- je fais ce que j'ai à faire sur ces fichiers;
- je recompresse le tout pour renvoi à l'expéditeur.
Dans ce contexte, il faut que le format de l'archive a.zip soit le même
que celui de l'archive reçue.
Or visiblement, zipfile.write n'accepte pas de répertoire comme argument.
Comment faire ?
Je sais bien que l'on peut compresser l'archive sans le répertoire
et, avant de la décompresser, créer le répertoire à la mano, sauf que
pour la personne à qui je renvois l'archive, tout doit être transparent.
la recherche qui va bien, c'était sur google: "python zip file empty directory", premier URL.
A+
Olivier
OdarR
Faudra encore un peu "gratter" ce zip pour être sûr de ce qui doit être créé : pour avoir les fichiers dans le répertoire, il faut regarder les infos d'un vrai zip. crée p.ex. une archive zip et teste ceci dessus: ex:
import zipfile
def descZip(name): z=zipfile.ZipFile("%s" % (name), 'r') print z.printdir() print "n"
for zif in z.infolist(): print zif.filename+"|"+ str(zif.file_size) + "|"+ str (zif.external_attr) + "n"
descZip("essaiComic.zip")
Chez moi, cela donne ceci : In [79]: %run testzip.py File Name Modified Size essaiComic/ 2009-01-06 17:48:04 0 essaiComic/Page_1.jpg 2009-01-06 17:48:04 76314 None
essaiComic/|0|1106067456
essaiComic/Page_1.jpg|76314|2175025152
----
Maintenant faut essayer dans l'autre sens ;-), avec des valeurs correspondantes dans le zip (1106067456 au lieu de 48 comme évoqué un peu plus haut). à essayer, on verra bien :-)
a+
Olivier
Faudra encore un peu "gratter" ce zip pour être sûr de ce qui doit
être créé :
pour avoir les fichiers dans le répertoire, il faut regarder les infos
d'un vrai zip.
crée p.ex. une archive zip et teste ceci dessus:
ex:
import zipfile
def descZip(name):
z=zipfile.ZipFile("%s" % (name), 'r')
print z.printdir()
print "n"
for zif in z.infolist():
print zif.filename+"|"+ str(zif.file_size) + "|"+ str
(zif.external_attr) + "n"
descZip("essaiComic.zip")
Chez moi, cela donne ceci :
In [79]: %run testzip.py
File Name
Modified Size
essaiComic/ 2009-01-06
17:48:04 0
essaiComic/Page_1.jpg 2009-01-06
17:48:04 76314
None
essaiComic/|0|1106067456
essaiComic/Page_1.jpg|76314|2175025152
----
Maintenant faut essayer dans l'autre sens ;-), avec des valeurs
correspondantes dans le zip (1106067456 au lieu de 48 comme évoqué un
peu plus haut).
à essayer, on verra bien :-)
Faudra encore un peu "gratter" ce zip pour être sûr de ce qui doit être créé : pour avoir les fichiers dans le répertoire, il faut regarder les infos d'un vrai zip. crée p.ex. une archive zip et teste ceci dessus: ex:
import zipfile
def descZip(name): z=zipfile.ZipFile("%s" % (name), 'r') print z.printdir() print "n"
for zif in z.infolist(): print zif.filename+"|"+ str(zif.file_size) + "|"+ str (zif.external_attr) + "n"
descZip("essaiComic.zip")
Chez moi, cela donne ceci : In [79]: %run testzip.py File Name Modified Size essaiComic/ 2009-01-06 17:48:04 0 essaiComic/Page_1.jpg 2009-01-06 17:48:04 76314 None
essaiComic/|0|1106067456
essaiComic/Page_1.jpg|76314|2175025152
----
Maintenant faut essayer dans l'autre sens ;-), avec des valeurs correspondantes dans le zip (1106067456 au lieu de 48 comme évoqué un peu plus haut). à essayer, on verra bien :-)
a+
Olivier
fred
OdarR a écrit :
tout cela reste confus.;-)
Hmmm...
Arco :-)
Fichier zip d'origine, créé par quelqu'un d'autre, qui ne l'a pas zippé avec python :