[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