Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

zipfile.write et repertoire...

11 réponses
Avatar
fred
Bonjour,

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.

Une idée ?

Merci d'avance.

Cdlt.

--
Fred

10 réponses

1 2
Avatar
fred
fred a écrit :

Bonjour,

Comment créer une archive zip avec le nom du répertoire en début
d'archive ?



Personne n'a une ptite idée ?

je vais devoir me le faire comme un porc à coups d'exec ?

So bad.


Cdlt.

--
Fred
Avatar
OdarR
On 18 mar, 13:38, fred wrote:
Personne n'a une ptite idée ?



non ;-)


je regarderais ici:
<http://bytes.com/topic/python/answers/851018-how-zip-directory-python-
using-zipfile>

(voir 2eme réponse)

y a aussi "chilkat", mais c'est payant :'-(

Olivier
Avatar
fred
OdarR a écrit :

On 18 mar, 13:38, fred wrote:
Personne n'a une ptite idée ?



non ;-)

je regarderais ici:
<http://bytes.com/topic/python/answers/851018-how-zip-directory-python-
using-zipfile>

(voir 2eme réponse)


Hmmm...

Certes.

Mais ce n'était pas la question ;-)

Ce n'est pas un problème de récursion.

Je le refais :-)

Voici ce que j'ai dans l'archive originale :

Archive: 2009-03-19a.zip
Length Method Size Ratio Date Time CRC-32 Name
-------- ------ ------- ----- ---- ---- ------ ----
0 Stored 0 0% 03-20-09 08:10 00000000 2009-03-19/
115604 Defl:N 90176 22% 03-20-09 08:10 700ee60b 2009-03-19/foo.dat
115604 Defl:N 97725 16% 03-20-09 08:10 1680cf1d 2009-03-19/bar.dat

Et voici ce que j'arrive à créer comme archive zip :

Archive: 2009-03-19b.zip
Length Method Size Ratio Date Time CRC-32 Name
-------- ------ ------- ----- ---- ---- ------ ----
115604 Defl:N 90176 22% 03-20-09 08:10 700ee60b 2009-03-19/foo.dat
115604 Defl:N 97725 16% 03-20-09 08:10 1680cf1d 2009-03-19/bar.dat


Manque donc le répertoire 2009-03-19/

Le problème, c'est que même ZipFile n'arrive pas à décompresser
une telle archive, parce qu'il manque tout simplement le répertoire.

Qu'une méthode de ZipFile n'arrive pas à décompresser une archive elle-même
créée par une méthode de ZipFile, je trouve ça un peu fort de café.


Merci quand même.

--
Fred
Avatar
OdarR
On 22 mar, 20:52, fred wrote:
Ce n'est pas un problème de récursion.

Je le refais :-)

Voici ce que j'ai dans l'archive originale :

Archive:  2009-03-19a.zip
 Length   Method    Size  Ratio   Date   Time   CRC-32    Name
--------  ------  ------- -----   ----   ----   ------    - ---
       0  Stored        0   0%  03-20-09 08:10  0 0000000  2009-03-19/
  115604  Defl:N    90176  22%  03-20-09 08:10  700ee60b  2009-03-19/foo.dat
  115604  Defl:N    97725  16%  03-20-09 08:10  1680cf1d  2009-03-19/bar.dat

Et voici ce que j'arrive à créer comme archive zip :

Archive:  2009-03-19b.zip
 Length   Method    Size  Ratio   Date   Time   CRC-32    Name
--------  ------  ------- -----   ----   ----   ------    - ---
  115604  Defl:N    90176  22%  03-20-09 08:10  700ee60b  2009-03-19/foo.dat
  115604  Defl:N    97725  16%  03-20-09 08:10  1680cf1d  2009-03-19/bar.dat

Manque donc le répertoire 2009-03-19/

Le problème, c'est que même ZipFile n'arrive pas à décompresser
une telle archive, parce qu'il manque tout simplement le répertoire.



que dit Python ?
il ne dit rien et "saute" le répertoire ?

Qu'une méthode de ZipFile n'arrive pas à décompresser une archive e lle-même
créée par une méthode de ZipFile, je trouve ça un peu fort de caf é.



je doute que le package zipfile ait créé cette archive, si celui-ci
justement a du mal avec les répertoires, non ?

tout cela reste confus.;-)

Olivier
Avatar
OdarR
On 22 mar, 21:08, OdarR wrote:
> Qu'une méthode de ZipFile n'arrive pas à décompresser une archive elle-même
> créée par une méthode de ZipFile, je trouve ça un peu fort de c afé.




regarde un peu ceci :

In [16]: z=zipfile.ZipFile("new2.zip","w")

In [17]: zinfo=zipfile.ZipInfo("Empty/",(2002,12,31,23,59,59))

In [18]: zinfo.external_attrH

In [19]: z.writestr(zinfo,"")

Maintenant tu reprends ton Finder, Explorer ou autre, et tu ouvres ton
zip.
Chez moi cela crée un dossier vide 'Empty'.
dingue, non ? ;-)

Olivier
Avatar
OdarR
On 22 mar, 20:52, fred wrote:
Merci quand même.



de rien.

désolé pour le précédent goret-quotage.

la recherche qui va bien, c'était sur google: "python zip file empty
directory",
premier URL.

A+

Olivier
Avatar
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
Avatar
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 :

Archive:  2009-03-19a.zip
 Length   Method    Size  Ratio   Date   Time   CRC-32    Name
--------  ------  ------- -----   ----   ----   ------    ----
       0  Stored        0   0%  03-20-09 08:10  00000000  2009-03-19/
  115604  Defl:N    90176  22%  03-20-09 08:10  700ee60b  2009-03-19/foo.dat
  115604  Defl:N    97725  16%  03-20-09 08:10  1680cf1d  2009-03-19/bar.dat

Je le décompresse avec mon ptit script, zou.

Et je le re-zip.
Dans l'archive, j'obtiens ça :

Archive:  2009-03-19b.zip
 Length   Method    Size  Ratio   Date   Time   CRC-32    Name
--------  ------  ------- -----   ----   ----   ------    ----
  115604  Defl:N    90176  22%  03-20-09 08:10  700ee60b  2009-03-19/foo.dat
  115604  Defl:N    97725  16%  03-20-09 08:10  1680cf1d  2009-03-19/bar.dat

Maintenant, si j'essaie de décompresser cette nouvelle archive avec ZipFile, il
plante :

IOError: [Errno 2] No such file or directory: '2009-03-19/foo.dat'

Because... je pense que le répertoire initial n'est pas créé.

Est-ce moins confus ? ;-)

--
Fred
Avatar
fred
OdarR a écrit :

Chez moi cela crée un dossier vide 'Empty'.
dingue, non ? ;-)


Ben non.

C'est toute la puissance de python face à la faiblesse de l'utilisateur !

:-)))



Merci !!!

--
Fred.
Avatar
fred
OdarR a écrit :

On 22 mar, 20:52, fred wrote:
Merci quand même.



de rien.


Ah bah si !

désolé pour le précédent goret-quotage.



De rien.

:-))

la recherche qui va bien, c'était sur google: "python zip file empty
directory",
premier URL.


Bah oui, c'est tjrs ça, le problème : trouver les bons mots-clés.

« empty directory », pffff...

Pourrait pas faire ça, python, trouver les bons mots-clés, hein ?






Bon, ok, je vais aller me coucher :-/

--
Fred
1 2