De nombreux modules que j'utilise importent des fichiers entiers dans la mémoire ou font jouer le contenu d'un fichier pendant qu'ils le traitent. Je me demande s'il existe un moyen de suivre ce genre de progrès de chargement? Peut-être une classe wrapper qui prend un rappel?Poursuite du chargement du fichier de suivi en Python
3
A
Répondre
7
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
Edit: Je sais que ce n'est pas le meilleur code, mais je voulais juste montrer le concept.
2
Si vous voulez dire "import" (pas "read"), vous pouvez remplacer les définitions de module d'import. Vous pouvez ajouter des fonctionnalités de synchronisation. Voir le module imp. Si vous voulez dire "read", vous pouvez envelopper de manière triviale les fichiers Python avec votre propre wrapper. Les fichiers n'exposent pas trop de méthodes. Vous pouvez remplacer ceux intéressants pour obtenir des données de synchronisation.
>>> class MyFile(file):
... def read(self,*args,**kw):
... # start timing
... result= super(MyFile,self).read(*args,**kw)
... # finish timing
... return result