deciding what is a dir (folder) in a zip file

Gabriel Genellina gagsl-py at
Fri Nov 17 00:41:02 CET 2006

At Thursday 16/11/2006 10:48, Jim wrote:

>I'm trying to read .zip files and drop from the listing those files
>that are directories.  I'm using the zipfile module.
>Googling has increased my suspicion that
>it is not just a matter of seeing if the file name ends in '/' and that
>the relevant external file attribute seems to have different values for
>people from different platforms, so just experimenting on my platform
>doesn't seem to be a safe solution.

Ending in / appears to be enough. Filenames are stored using / in 
Windows or Linux, using winzip, gzip and winrar at least.
Notice that no ordering is implied: directories may come _after_ 
filenames inside it.
This fragment extracts all ZipFile contents, maintaining directory structure:

--- cut ---
zf = ZipFile(zfname, 'r')
     # creo todos los subdirectorios que existen en el zip
     # (vienen en cualquier orden)
     namelist = list(zf.namelist())
     namelist.sort(key=lambda n:len(n))
     for fn in namelist:
         if fn.endswith('/'):
             fullfn = os.path.join(tmpdir, *fn[:-1].split('/'))
             if not os.path.isdir(fullfn):

     # extraigo todos los archivos, respetando sus directorios
     for fn in namelist:
         if fn.endswith('/'):
         fullfn = os.path.join(tmpdir, *fn.split('/'))
         ofile = open(fullfn, 'wb')
         # mantener fecha/hora
         dt = zf.getinfo(fn).date_time
         ft = time.mktime((dt[0],dt[1],dt[2],dt[3],dt[4],dt[5],0,0,-1))
         os.utime(fullfn, (ft,ft))
--- cut ---

Gabriel Genellina
Softlab SRL 

Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis! 
¡Abrí tu cuenta ya! -

More information about the Python-list mailing list