Tracking-Datei laden Fortschritte in Python
Frage
Viele Module verwende ich Import ganze Dateien in den Speicher oder rieseln Inhalt einer Datei in während sie es verarbeiten. Ich frage mich, ob es eine Möglichkeit gibt, diese Art zu verfolgen Fortschritt des Ladens? Möglicherweise eine Wrapper-Klasse, die einen Rückruf nimmt?
Lösung
Ich würde durch das tun, indem Sie die Größe der Datei zu bestimmen, und dann einfach die Summe dividiert durch die Anzahl der gelesenen Bytes. Wie folgt aus:
import os
def show_progress(file_name, chunk_size=1024):
fh = open(file_name, "r")
total_size = os.path.getsize(file_name)
total_read = 0
while True:
chunk = fh.read(chunk_size)
if not chunk:
fh.close()
break
total_read += len(chunk)
print "Progress: %s percent" % (total_read/total_size)
yield chunk
for chunk in show_progress("my_file.txt"):
# Process the chunk
pass
Edit:. Ich weiß, dass es nicht der beste Code, aber ich wollte nur das Konzept zeigen
Andere Tipps
Wenn Sie wirklich bedeuten „Import“ (nicht „lesen“), dann können Sie die Import-Modul Definitionen außer Kraft setzen. Sie können Timing-Funktionen hinzuzufügen.
Sieheimp Modul.
Wenn Sie „lesen“ bedeuten, dann können Sie triviale Python-Dateien mit Ihrem eigenen Datei-like-Wrapper wickeln. Dateien setzen Sie nicht zu viele Methoden. Sie können die interessanteren überschreiben, um Timing-Daten zu erhalten.
>>> class MyFile(file):
... def read(self,*args,**kw):
... # start timing
... result= super(MyFile,self).read(*args,**kw)
... # finish timing
... return result