0 votes

Comment obtenir la progression du déplacement d'un fichier en python ?

J'ai un petit script pour trier mes fichiers téléchargés et ça marche très bien, mais j'aimerais imprimer la progression d'un déplacement de fichier, pour quand il fait les gros déplacements, actuellement je fais quelque chose comme :

print "moving..."
os.renames(pathTofile, newName)
print "done"

Mais j'aimerais pouvoir voir quelque chose comme une barre de progression (style [.....]) ou un pourcentage imprimé sur stdout.

Je n'ai pas besoin ou ne veux pas d'une interface quelconque, juste le moyen le plus simple et le moins contraignant ( :) ) d'obtenir le déroulement de l'opération.)

Gracias.

3voto

Benno Points 3677

Vous ne pourrez pas obtenir ce genre d'information en utilisant os.renames. Votre meilleure chance est de remplacer cette opération par une opération de copie de fichier maison, mais appelez stat sur le fichier au préalable afin d'obtenir la taille complète et de savoir où vous en êtes.

Quelque chose comme ça :

source_size = os.stat(SOURCE_FILENAME).st_size
copied = 0
source = open(SOURCE_FILENAME, 'rb')
target = open(TARGET_FILENAME, 'wb')

while True:
    chunk = source.read(32768)
    if not chunk:
        break
    target.write(chunk)
    copied += len(chunk)
    print '\r%02d%%' % (copied * 100 / source_size),

source.close()
target.close()

Notez cependant que cette méthode sera plus que probablement plus lente que l'utilisation de os.rename.

1voto

Greg Hewgill Points 356191

Il n'y a aucun moyen d'obtenir une barre de progression car l'appel "renommer" qui déplace le fichier est un appel unique du système d'exploitation.

Il est intéressant de noter que l'appel "renommer" ne prend du temps que si la source et la destination sont sur différents volumes physiques. S'ils sont sur le même volume, le renommage ne prendra presque pas de temps. Si vous savez que vous copiez des données entre des volumes, vous pouvez utiliser les fonctions de l'outil shutil module tel que copyfileobj . Il n'y a pas de rappel pour le suivi de la progression, mais vous pouvez implémenter votre propre objet de type fichier source ou destination pour suivre la progression.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X