Bonjour à tous,

Je souhaite intégrer au code ci dessous une barre de progression me permettant de savoir l'état d'avancement de mes copies de fichiers.

Voici le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
# -*- coding: cp1252 -*-
import os
import shutil
 
root_src_dir = 'F:\PATH_SOURCE'
root_dst_dir = 'D:\PATH_DESTINATION'
 
for src_dir, dirs, files in os.walk(root_src_dir):
    dst_dir = src_dir.replace(root_src_dir, root_dst_dir)
 
    if not os.path.exists(dst_dir):
        os.mkdir(dst_dir)
 
    for file_ in files:
        src_file = os.path.join(src_dir, file_)
        dst_file = os.path.join(dst_dir, file_)
 
        if os.path.exists(dst_file):
            os.remove(dst_file)
 
        shutil.copyfile(src_file, dst_file)
        print 'Le fichier %s à bien été copié !' %(file_)
J'ai déjà inséré une barre de progression mais lors d'un transfert FTP via ce code et l'aide précieuse de ce forum :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 
# -*- coding: utf-8 -*-
 
import os
import ftplib
import sys
import time
 
class FtpUploadTracker: 
    def __init__(self, totalSize):
        self.totalSize = totalSize
        self.sizeWritten = 0
        self.RefValue=0
        self.i=0
        self.p=0
        self.fin=''
        #print '[',
 
    def handle(self, block):
        self.sizeWritten += len(block)
        if self.sizeWritten < self.totalSize:
            if round((float(self.sizeWritten)/float(self.totalSize))*100) - self.RefValue==1:
                i=self.i
                if round((float(self.sizeWritten)/float(self.totalSize))*100)==100:
                    fin = "Upload terminé !"
 
                self.p=int((float(self.sizeWritten)/float(self.totalSize))*100)
                ligne = '[' + '#'*i + ' '*(20-i) + '] %d%% %s' % (self.p, self.fin) 
                sys.stdout.write('\r%s' % ligne)
                sys.stdout.flush()
                self.i += 1
                toto.write(str(i))
                self.RefValue=self.RefValue+5
 
        else:
            sys.stdout.write('\r\n')
            sys.stdout.flush() 
 
 # Connect
ftp = ftplib.FTP('hôte', 'login', 'pass')
 
# file to send
fichier = 'test.zip'
print 'File Name: '+fichier
totalSize = os.path.getsize(fichier)
print 'Size of file: '+str(totalSize/(1024*1024))+'Mo'
f = open(fichier, 'rb')
 
"""
Class FtpUploadTracker
"""
uploadTracker = FtpUploadTracker(totalSize)
 
# Send the file
ftp.storbinary('STOR ' + fichier, f, 1024, uploadTracker.handle)
 
# Close file and FTP
f.close()
ftp.quit()
Dans ce code lorsque j'envoyais mon fichier sur le FTP je faisais appel à ma classe FtpUploadTracker: ftp.storbinary('STOR ' + fichier, f, 1024, uploadTracker.handle). Je pouvais récupérer via block la valeur des données envoyées et donc savoir ou j'en étais dans mon upload.

Je souhaite savoir s'il est possible de faire la même chose mais avec shutil.copyfile ?

Merci d'avance pour votre aide.