Seguimiento del progreso de carga de archivos en Python
Pregunta
Muchos módulos que utilizo importan archivos completos a la memoria o introducen el contenido de un archivo mientras lo procesan. Me pregunto si hay alguna forma de rastrear este tipo de progreso de carga. ¿Posiblemente una clase de contenedor que recibe una devolución de llamada?
Solución
Lo haría determinando el tamaño del archivo y luego simplemente dividiendo el total por el número de bytes leídos. Así:
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
Editar: Sé que no es el mejor código, pero solo quería mostrar el concepto.
Otros consejos
Si realmente quiere decir "importar" (no "leer"), entonces puede anular las definiciones del módulo de importación. Puede agregar capacidades de tiempo.
Consulte el módulo imp .
Si te refieres a "leer", entonces puedes envolver trivialmente archivos de Python con tu propio contenedor de archivos. Los archivos no exponen demasiados métodos. Puede anular los interesantes para obtener datos de tiempo.
>>> class MyFile(file):
... def read(self,*args,**kw):
... # start timing
... result= super(MyFile,self).read(*args,**kw)
... # finish timing
... return result