Question

De nombreux modules que j'utilise importent des fichiers entiers dans la mémoire ou filtrent le contenu d'un fichier pendant qu'ils le traitent. Je me demande s'il existe un moyen de suivre ce type de progression du chargement? Peut-être une classe wrapper qui prend un rappel?

Était-ce utile?

La solution

Je le ferais en déterminant la taille du fichier, puis en divisant simplement le total par le nombre d'octets lus. Comme ceci:

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 

Modifier: Je sais que ce n'est pas le meilleur code, mais je voulais simplement montrer le concept.

Autres conseils

Si vous voulez parler de " import " (pas "lu"), vous pouvez remplacer les définitions de module d'importation. Vous pouvez ajouter des capacités de synchronisation.

Voir le module imp .

Si vous voulez dire "lu", vous pouvez en toute transparence emballer des fichiers Python avec votre propre wrapper semblable à un fichier. Les fichiers n'exposent pas trop de méthodes. Vous pouvez remplacer les éléments intéressants pour obtenir des données temporelles.

>>> class MyFile(file):
...     def read(self,*args,**kw):
...         # start timing
...         result= super(MyFile,self).read(*args,**kw)
...         # finish timing
...         return result
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top