Monitoraggio dell'avanzamento del caricamento dei file in Python
Domanda
Molti moduli che uso importano interi file in memoria o copiano il contenuto di un file mentre lo elaborano. Mi chiedo se c'è un modo per tenere traccia di questo tipo di avanzamento del caricamento? Forse una classe wrapper che accetta un callback?
Soluzione
Lo farei determinando la dimensione del file e quindi semplicemente dividendo il totale per il numero di byte letti. In questo modo:
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
Modifica: So che non è il codice migliore, ma volevo solo mostrare il concetto.
Altri suggerimenti
Se effettivamente intendi " import " (non " leggi ") quindi puoi sovrascrivere le definizioni del modulo di importazione. Puoi aggiungere funzionalità di temporizzazione.
Vedi il modulo imp .
Se intendi " leggi " ;, allora puoi avvolgere banalmente i file Python con il tuo wrapper simile a un file. I file non espongono troppi metodi. Puoi ignorare quelli interessanti per ottenere i dati di temporizzazione.
>>> class MyFile(file):
... def read(self,*args,**kw):
... # start timing
... result= super(MyFile,self).read(*args,**kw)
... # finish timing
... return result