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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top