Suivi de la progression du chargement de fichiers en Python
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?
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