Pergunta

Um monte de módulos I usar arquivos inteiros de importação para a memória ou trickle conteúdo de um arquivo em enquanto eles processá-lo. Eu estou querendo saber se há alguma maneira de controlar este tipo de carregamento de progresso? Possivelmente uma classe wrapper que leva um callback?

Foi útil?

Solução

Eu faria por esta determinando o tamanho do arquivo, e depois simplesmente dividindo o total pelo número de bytes ler. Como esta:

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:. Eu sei que não é o melhor código, mas eu só queria mostrar o conceito

Outras dicas

Se você realmente quer dizer "importação" (não "ler"), então você pode substituir as definições do módulo de importação. Você pode adicionar recursos de tempo.

Veja a imp módulo.

Se você quer dizer "ler", então você pode trivialmente embrulhar arquivos Python com o seu próprio arquivo-como wrapper. Arquivos não exponha demais métodos. Você pode substituir os interessantes para obter dados de tempo.

>>> class MyFile(file):
...     def read(self,*args,**kw):
...         # start timing
...         result= super(MyFile,self).read(*args,**kw)
...         # finish timing
...         return result
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top