[Python] zipfile.extractall ...

Luca luca800 a gmail.com
Gio 1 Giu 2017 16:06:31 CEST


Il giorno 31 maggio 2017 22:31, Daniele Zambelli <daniele.zambelli a gmail.com
> ha scritto:

>
> Non ho capito bene il problema, ma, forse, puoi fare la lista dei file
> della cartella prima di espandere lo zip e dopo averlo espanso, dal
> confronto dovresti trovare le cartelle create.
>
> In realtà volevo evitare di fare un controllo sui file.
Comunque ho seguito il tuo consiglio e ho risolto così:
```
    with zipfile.ZipFile(sfile.filename, 'r') as zfile:
        # recupero la lista dei nomi dei file nello zip
        lst = zfile.namelist()
        # tengo conto del primo nella lista, se è una cartella DOVREBBE
essere
        # la root.
        first = lst[0]
        # comunque imposto la path iniziale al nome dello zip senza
estensione.
        path = splitext(basename(zfile.filename))[0]
        # Se il primo file in lista non comincia con il nome della path
        # *pronosticata* allora provo altre strade.
        if not first.startswith(path):
            # proviamo a impostare la path con il nome del primo file in
lista
            # se questo finisce con / (quindi è una cartella). Altrimenti
            # impostiamo la path a *stringa vuota*
            path = first if first.endswith('/') else ''
            if path:
                # ok creiamo una lista di percorsi relativi alla path
                # probabile (omettiamo i file con wildcards, almeno per
ora).
                files = [
                    join(path, f.filename) for f in sfile.files
                    if not '*' in f.filename]
                # ok ora che abbiamo creato la lista confrontiamo i
percorsi
                # con quelli presenti nello zip.
                if not all([f in lst for f in files]):
                    # a questo punto se tutti i file previsti NON sono nella
                    # lista reimpostiamo la path a *stringa vuota*.
                    # questo farà si che i successivi join siano relativi
alla
                    # cartella temporanea.
                    path = ''
        # Non è ancora sicuro che il percorso sia corretto, ma in linea di
        # massima a questo punto si può agire sulla configurazione.

```

Oltretutto a questo punto estraggo direttamente i file che mi servono.

grazie.
-- 
Luca
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20170601/37efb9ad/attachment.html>


Maggiori informazioni sulla lista Python