2016-12-01 2 views
0

Fondamentalement, ce que je veux faire dans mon script est de copier des fichiers de dest_path vers source_path. Vous pouvez le configurer et voir comment cela fonctionne -Mon script Python ignore les fichiers lors de la copie

Mais pour une raison quelconque, il copie le premier fichier et me dit que le reste est déjà copié, ce qui n'est pas vrai. Y at-il quelque chose que je ne vois pas ou que j'ai mal fait? im assez nouveau pour python désolé si je faisais quelque chose de mal évidemment, je ne peux pas le voir ...

import time, shutil, os, datetime 

source_path = r"C:\SOURCE"        # Your Source path 
dest_path = r"C:\DESTINATION"       # Destination path 
file_ending = '.txt'         # Needed File ending 
files = os.listdir(source_path)       # defines 
date = datetime.datetime.now().strftime('%d.%m.%Y')  # get the current date 

while True: 
    print("Beginning checkup") 
    print("=================") 
    if not os.path.exists(source_path or dest_path): # checks if directory exists 
     print("Destination/Source Path does not exist!") 
    else: 
     print("Destination exists, checking files...") 
     for f in files: 
      if f.endswith(file_ending): 
       new_path = os.path.join(dest_path, date,) 
       src_path = os.path.join(source_path, f) 
       if not os.path.exists(new_path): # create the folders if they dont already exists 
        print("copying " + src_path) 
        os.makedirs(new_path) 
        shutil.copy(src_path, new_path) 
       else: 
        print(src_path + " already copied") 
        # shutil.copy(src_path, new_path) 

    print("=================") 
    print('Checkup done, waiting for next round...') 
    time.sleep(10) # wait a few seconds between looking at the directory 
+3

'sinon os.path.exists (chemin_source ou chemin_dest):' ne fait pas ce que vous pensez. 'ou' ne fonctionne pas de cette façon. – user2357112

+1

également 'si non os.path.exists (new_path)' sera vérifié pour chaque fichier dans 'source_path' et seul le premier fichier entrera dans ce bloc, puisque vous créez le' new_path' dans la première fois à travers – depperm

+0

Vous voyez new_path = os.path.join (chemin_dest, date,) était en fait new_path = os.path.join (chemin_dest, date, f), mais cela créerait un autre dossier pour chaque fichier copié. Ce n'est pas ce que je voulais, alors j'ai supprimé le f et maintenant il le fait. Comment puis-je résoudre ce @deppem – diatomym

Répondre

1

Comme @ user2357112 mentionné if not os.path.exists(source_path or dest_path) ne fait pas ce que vous pensez. Modification de

if not os.path.exists(source_path) or not os.path.exists(dest_path): 

Ce ne sera copier un fichier, car il crée le répertoire new_path la première fois par la if. Quelque chose comme cela devrait fonctionner:

if f.endswith(file_ending): 
    new_path = os.path.join(dest_path, date,) 
    src_path = os.path.join(source_path, f) 
    if not os.path.exists(new_path): # create the folders if they dont already exists 
     os.makedirs(new_path) 
    if not os.path.exists(os.path.join(new_path,f)): 
     print("copying " + src_path) 
     shutil.copy(src_path, os.path.join(new_path,f)) 
    else: 
     print(src_path + " already copied") 

Si le répertoire new_path n'existe pas alors faire le répertoire (cela ne devrait se produire une fois et ce if pourrait être déplacé à l'extérieur de la boucle, ainsi que new_path initialisation). Dans un if séparé, vérifiez si le fichier existe dans ce répertoire et, si ce n'est pas le cas, copiez le fichier à l'emplacement, sinon imprimez votre message.

+0

Tout d'abord, merci beaucoup. Cela fonctionne, merci pour cela mais je n'ai pas bien compris comment vous l'avez résolu. Vous avez ajouté une autre instruction if, pourriez-vous m'expliquer pour que je sache ce que le code fait? J'ai encore beaucoup de travail à faire avec ce script, donc je veux bien comprendre ce qu'il fait. J'espère que vous comprenez, et merci encore. – diatomym

+0

@diatomym laissez-moi savoir si l'explication est suffisante ou si vous avez besoin de plus – depperm

+0

Ah donc vous pouvez également vérifier les fichiers avec os.path.join(), non? C'est pourquoi je l'ai trouvé confus, mais je pense que c'est clair maintenant. – diatomym