Wie kopiert man eine Datei in Python mit einer Fortschrittsanzeige?

8

Wenn Sie große Dateien mit shutil.copy() kopieren, erhalten Sie keinen Hinweis darauf, wie der Vorgang abläuft.

Ich habe etwas zusammengestellt, das funktioniert - es verwendet eine einfache ProgressBar-Klasse (die einfach einen einfachen ASCII-Fortschrittsbalken als String zurückgibt) und eine Schleife von open().read() und .write() , um das eigentliche Kopieren durchzuführen. Es zeigt den Fortschrittsbalken mit sys.stdout.write("\r%s\r" % (the_progress_bar)) an, was ein bisschen hackisch ist, aber es funktioniert.

Sie können den Code (im Kontext) hier auf github sehen / p>

Gibt es ein eingebautes Modul, das das besser macht? Gibt es Verbesserungen, die an diesem Code vorgenommen werden können?

    
dbr 08.11.2008, 07:21
quelle

3 Antworten

14

Zwei Dinge:

  • Ich würde die Standardblockgröße um Menge größer als 512 machen. Ich würde mit 16384 und vielleicht mehr beginnen.
  • Aus Gründen der Modularität ist es möglicherweise besser, wenn die Funktion copy_with_prog nicht den Fortschrittsbalken selbst ausgibt, sondern eine Rückruffunktion aufruft, damit der Anrufer entscheiden kann, wie der Fortschritt angezeigt werden soll.

Vielleicht in etwa so:

%Vor%     
Greg Hewgill 08.11.2008, 07:28
quelle
5

Übertreibung? Vielleicht. Aber auf fast jedem System, Linux, Mac, und mit einem schnellen wxWidgets unter Windows installieren, können Sie das echte Geschäft haben, mit Pause und Abbrechen von Schaltflächen in einem GUI-Setup. Macs werden heutzutage mit wxWidgets ausgeliefert und es ist ein übliches Paket unter Linux.

Eine einzelne Datei ist sehr schnell (sie wird sofort fertig und sieht kaputt aus), so dass Sie vielleicht einen fileSet-Job erstellen möchten, der einmal pro Datei statt einmal pro Block tickt. Viel Spaß!

-Jim Carroll

%Vor%     
Jim Carroll 09.11.2008 14:08
quelle
1

Wenn Sie den Windows-Kopierdialog mit Fortschritt verwenden möchten, können Sie diese verwenden:

frmdstryr 14.07.2014 13:05
quelle

Tags und Links