2009-04-20 10 views
7

Ho bisogno di creare archivi ZIP su richiesta, utilizzando il modulo zipfile Python o le utilità della riga di comando di Unix.Stima dimensione zip/tempo di creazione

Le risorse da zippare sono spesso> 1 GB e non sono necessariamente compressive.

Come si calcola in modo efficiente il tempo/la dimensione di creazione?

+0

Giusto per chiarire, volevi stimare il tempo e le dimensioni della creazione prima di creare il file o al volo? –

+0

In anticipo. Le richieste ZIP sono in coda. – ohnoes

+0

In tal caso, ignora la mia risposta e accetta Nils ':-) –

risposta

15

Estrarre un gruppo di piccole parti dal file grande. Forse 64 blocchi di 64k ciascuno. Selezionato casualmente.

Concatenare i dati, comprimerli, misurare il tempo e il rapporto di compressione. Dal momento che hai selezionato casualmente parti del file è probabile che tu abbia compresso un sottoinsieme rappresentativo dei dati.

Ora tutto quello che dovete fare è stimare il tempo per l'intero file in base al tempo dei vostri dati di test.

+0

Questa è un'idea migliore della mia. +1. – Skurmedel

3

Suggerisco di misurare il tempo medio necessario per produrre uno zip di una certa dimensione. Quindi calcoli la stima da quella misura. Comunque penso che la stima sarà comunque molto approssimativa se non sai quanto bene i dati comprimono. Se i dati da comprimere avessero un "profilo" molto simile ogni volta potresti probabilmente fare previsioni migliori.

0

Se si utilizza il metodo ZipFile.write() di scrivere i file in archivio, è possibile effettuare le seguenti operazioni:

  1. ottenere un elenco dei file che si desidera comprimere e le loro dimensioni relative
  2. scrittura un file nell'archivio e tempo quanto tempo impiegato
  3. Calcola ETA in base al numero di file scritti, alle loro dimensioni e a quanto rimane.

Questo non funzionerà se si sta solo comprimendo un file veramente grande. Non ho mai usato il modulo zip da solo, quindi non sono sicuro che funzioni, ma per un numero limitato di file di grandi dimensioni, potresti usare la funzione ZipFile.writestr() e leggere/zippare i tuoi file in blocchi ?

1

Se è possibile richiamare i richiami dal modulo python, suggerirei di scoprire quanti byte vengono elaborati in secondi (archiviando semplicemente dove nel file si è all'inizio del secondo e dove si è alla fine). Quando disponi dei dati sulla velocità con cui il tuo computer è acceso, puoi ovviamente salvarlo e utilizzarlo come base per il tuo prossimo file zip. (Normalmente raccolgo circa 5 campioni prima di mostrare un periodo di tempo)

L'uso di questo metodo può darti Microsoft minutes in modo da ottenere più campioni che occorrerebbe fare la media. Questo potrebbe essere il caso se stai creando un file zip che contiene molti file, poiché ZIP tende a rallentare quando si comprimono molti file piccoli rispetto a un file di grandi dimensioni.

Problemi correlati