Schätzung der Zip-Größe / Erstellungszeit

7

Ich muss ZIP-Archive bei Bedarf erstellen, entweder mit dem Python-Zipfile-Modul oder mit Unix-Befehlszeilenprogrammen.

Zu komprimierende Ressourcen sind oft & gt; 1GB und nicht unbedingt komprimierungsfreundlich.

Wie kann ich die Zeit / Größe der Erstellung effizient berechnen?

    
ohnoes 20.04.2009, 10:23
quelle

4 Antworten

15

Extrahiere eine Menge kleiner Teile aus der großen Datei. Vielleicht 64 Stücke von je 64k. Zufällig ausgewählt.

Verketten Sie die Daten, komprimieren Sie sie, messen Sie die Zeit und das Komprimierungsverhältnis. Da Sie zufällig Teile der Datei ausgewählt haben, besteht die Möglichkeit, dass Sie eine repräsentative Teilmenge der Daten komprimiert haben.

Jetzt müssen Sie nur noch die Zeit für die gesamte Datei basierend auf der Zeit Ihrer Testdaten schätzen.

    
Nils Pipenbrinck 20.04.2009, 10:32
quelle
3

Ich schlage vor, dass Sie die durchschnittliche Zeit messen, die benötigt wird, um eine Zip-Datei mit einer bestimmten Größe zu erstellen. Dann berechnen Sie die Schätzung von diesem Maß. Ich denke jedoch, dass die Schätzung in jedem Fall sehr grob sein wird, wenn Sie nicht wissen, wie gut die Daten komprimiert sind. Wenn die Daten, die Sie komprimieren möchten, jedes Mal ein sehr ähnliches "Profil" hatten, könnten Sie wahrscheinlich bessere Vorhersagen treffen.

    
Skurmedel 20.04.2009 10:31
quelle
1

Wenn es möglich ist, Fortschrittsrückrufe vom Python-Modul zu erhalten, würde ich vorschlagen, herauszufinden, wie viele Bytes pro Sekunde verarbeitet werden (durch einfaches Speichern, wo in der Datei waren Sie am Anfang des zweiten, und wo Sie am Ende sind) . Wenn Sie die Daten darüber haben, wie schnell der Computer auf Ihrem Computer ist, können Sie ihn natürlich speichern und als Grundlage für Ihre nächste Zip-Datei verwenden. (Ich sammle normalerweise ungefähr 5 Proben, bevor ich eine Zeit prognostiziere)

Wenn Sie diese Methode verwenden, erhalten Sie Microsoft-Protokolle , damit Sie mehr Beispiele erhalten, die Sie benötigen um es zu mitteln. Dies wäre insbesondere dann der Fall, wenn Sie eine Zip-Datei erstellen, die viele Dateien enthält, da ZIP bei der Komprimierung vieler kleiner Dateien im Vergleich zu einer großen Datei dazu neigt, langsamer zu werden.

    
EKS 20.04.2009 10:41
quelle
0

Wenn Sie die ZipFile.write () -Methode verwenden, um Ihre Dateien in das Archiv zu schreiben, dann könnte Folgendes tun:

  1. Hier erhalten Sie eine Liste der Dateien, die Sie komprimieren möchten und deren relative Größe
  2. Schreiben Sie eine Datei in das Archiv und geben Sie an, wie lange es dauerte
  3. Berechnen Sie ETA basierend auf der Anzahl der geschriebenen Dateien, ihrer Größe und der verbleibenden Menge.

Dies funktioniert nicht, wenn Sie nur eine wirklich große Datei zippen. Ich habe das Zip-Modul nie selbst benutzt, also bin ich mir nicht sicher, ob es funktionieren würde, aber für eine kleine Anzahl großer Dateien könnten Sie vielleicht die ZipFile.writestr () - Funktion verwenden und Ihre Dateien in Blöcken einlesen / zippen ?

    
Jon Cage 20.04.2009 10:39
quelle

Tags und Links