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?

War es hilfreich?

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.

Siehe

imp 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top