2017-02-27 1 views
0

J'utilise le code suivant et il ne fait que recommencer et tournera pour toujours si je le laisse. J'essaye de le laisser passer des fichiers déjà là et arrêter quand tous les fichiers ont été copiés.Comment est-ce que je garde les fichiers qui ont déjà été copiés d'être copiés?

import os 
import shutil 

source_dir = r"D:\\Tibi" 
target_dir = r"D:\\fileSave/" 
extensions = (".mp4", ".CR2") 

while True: 
    try: 
     for directory, _, file_names in os.walk(source_dir): 
      for file_name in file_names: 
       if file_name.endswith(extensions): 
        source_path = os.path.join(directory, file_name) 
        target_path = os.path.join(target_dir, file_name) 
        print("Moving {} to {} from {}".format(file_name, target_dir, directory)) 
        shutil.copy(source_path, target_dir) 


except shutil.SameFileError: 
    print("{} is already in the folder".format(file_name)) 

Notez que je mets l'exception là-dedans parce qu'elle a trouvé quand arrêt immédiat d'un fichier dans le dossier qui était déjà là-dedans.

+0

Bien sûr, il fonctionne pour toujours. Vous l'avez dans une boucle 'while' qui ne se casse jamais ... –

+0

Donc, si je sors la déclaration while True. ça va casser la boucle quand c'est fait? Mais alors comment puis-je l'empêcher de copier des fichiers déjà présents? –

+0

Il s'arrêtera lorsque votre itérateur 'os.walk' sera épuisé. –

Répondre

0

Vous pouvez utiliser os.listdir() pour créer une liste de tous les fichiers et dossiers dans le répertoire, puis utiliser un pour itérer dans la liste des fichiers

Quelque chose comme cela devrait suffire

import os 

files = os.listdir("D:\\Tibi") 

for file in files: 
    "copy files..."