Acompanhar o progresso de carregamento de arquivo em Python
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?
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