2017-02-01 1 views
0

Je tente de déplacer des fichiers PDF à partir de sous-répertoires dans un dossier. Ce code fonctionne et déplace tous les fichiers PDF trouvés. Je voudrais déplacer uniquement les fichiers PDF qui Corresp d'un fichier texte en utilisant ce code:Copie de fichiers à partir d'un fichier texte dans le répertoire

with open('LIST.txt', 'r') as f: 
    myNames = [line.strip() for line in f] 
    print myNames 

code complet:

import os 
import shutil 

with open('LIST.txt', 'r') as f: 
    myNames = [line.strip() for line in f] 
    print myNames 

dir_src = r"C:\Users\user\Desktop\oldfolder" 
dir_dst = r"C:\Users\user\Desktop\newfolder" 

for dirpath, dirs, files in os.walk(dir_src): 
    for file in files: 
     if file.endswith(".pdf"): 
      shutil.copy(os.path.join(dirpath, file), dir_dst) 

exemple de contenu du fichier texte:

111111 
111112 
111113 
111114 
+0

vous ne souhaitez que déplacer les fichiers correspondant (dans quel contenu le nom du fichier ainsi??) À partir d'un fichier texte (je suppose que vous parlez de votre ' 'LIST.txt''?) –

Répondre

0

Première , créez un set au lieu d'une liste ici, donc la recherche sera plus rapide:

myNames = {line.strip() for line in f} 

Ensuite, pour le filtre, je suppose que myNames doit correspondre au nom de base (moins l'extension) de votre fichier (s). Ainsi, au lieu de:

if file.endswith(".pdf"): 
     shutil.copy(os.path.join(dirpath, file), dir_dst) 

vérifier l'extension et si l'extension moins basename appartient à votre jeu précédemment créé:

bn,ext = os.path.splitext(file) 
    if ext == ".pdf" and bn in myNames: 
     shutil.copy(os.path.join(dirpath, file), dir_dst) 

Pour correspondre le nom du fichier avec une sous-chaîne dans myNames, vous ne pouvez pas compter sur la in méthode. Vous pouvez le faire:

if ext == ".pdf" and any(s in file for s in myNames):