2012-01-19 1 views
10

fare qualcosa di simile:python zipfile, come faccio a sapere se un elemento è una directory?

from zipfile import ZipFile 

#open zip file 
zipfile = ZipFile('Photo.zip') 

#iterate zip contents 
for zipinfo in zipfile.filelist: 
    #do something 
    filepath, filename = path.split(zipinfo.filename) 

come faccio a sapere se zipinfo è un file o una directory?

Grazie per il vostro supporto.

risposta

12

Probabilmente questa è la strada giusta:

is_dir = lambda zipinfo: zipinfo.filename.endswith('/') 
+2

Credo che il separatore di directory sia sempre normalizzato in '/' all'interno di un file zip, indipendentemente da quale piattaforma sia stata creata. –

+0

@Greg: il mio dubbio era che dipendesse dalla piattaforma lo zip era ** aperto ** ma non aveva una casella di Windows per testarlo. – neurino

+0

No, non ci sono cambiamenti. Il separatore di percorso all'interno di un file zip è sempre '/' indipendentemente dalla piattaforma su cui è stato aperto. –

2

A partire da Python 3.6 c'è un metodo ZipInfo.is_dir().

with zipfile.ZipFile(zip_file) as archive: 
    for file in archive.namelist(): 
     file_info = archive.getinfo(file) 
     if file_info.is_dir(): 
      # do something 

See the Python 3.6 docs per dettagli.