2016-10-06 2 views
0

Le code ci-dessous recherche dans un répertoire pour tous les fichiers PDF et pour chacun, il trouve qu'il se déplace dans le dossier correspondant qui a '_folder' ajouté. Pourrait-il être exprimé en termes plus simples? C'est pratiquement illisible. Aussi, s'il ne trouve pas le dossier, il détruit le PDF!Déplacement du fichier shutil Python dans os marche pour la boucle

import os 
import shutil 

    for root, dirs, files in os.walk(folder_path_variable): 
     for file1 in files: 
      if file1.endswith('.pdf') and not file1.startswith('.'): 
       filenamepath = os.path.join(root, file1) 
       name_of_file = file1.split('-')[0] 
       folderDest = filenamepath.split('/')[:9] 
       folderDest = '/'.join(folderDest) 
       folderDest = folderDest + '/' + name_of_file + '_folder' 
       shutil.move(filenamepath2, folderDest) 

je veux vraiment traverser le même répertoire après la construction de la nom_du_fichier variable et si cette variable est un nom de dossier, il effectue le déplacement. Cependant, je suis tombé sur des problèmes en essayant nicher une autre boucle ...

Répondre

0

La réponse par John Zwinck est correcte, sauf qu'il contient un bug si le dossier de destination existe déjà, un dossier dans ce dossier est créé et le fichier PDF est déplacé vers cet emplacement. J'ai corrigé ceci en ajoutant une instruction 'break' dans la boucle interne for (pour le nom de fichier dans les fichiers).

Le code ci-dessous s'exécute maintenant correctement. Cherche le dossier nommé comme les premiers caractères du pdf (en séparant préfixe '-') avec '_folder' en queue, s'il existe, le pdf y est déplacé. Si ce n'est pas le cas, on crée le nom du préfixe et '_folder' et le pdf y est déplacé.

for root, dirs, files in os.walk(folder_path_variable): 
    for filename in files: 
     if filename.endswith('.pdf') and not filename.startswith('.'): 
      filepath = os.path.join(root, filename) 
      filename_prefix = filename.split('-')[0] 
      dest_dir = os.path.join(root, filename_prefix + '_folder') 
      if not os.path.isdir(dest_dir): 
       os.mkdir(dest_dir) 
      os.rename(filepath, os.path.join(dest_dir, filename)) 
    break 
0

Je voudrais essayer quelque chose comme ceci:

for root, dirs, files in os.walk(folder_path_variable): 
    for filename in files: 
     if filename.endswith('.pdf') and not filename.startswith('.'): 
      filepath = os.path.join(root, filename) 
      filename_prefix = filename.split('-')[0] 
      dest_dir = os.path.join(root, filename_prefix + '_folder') 
      if not os.path.isdir(dest_dir): 
       os.mkdir(dest_dir) 
      os.rename(filepath, os.path.join(dest_dir, filename)) 
+0

Si le dossier existe déjà, cela crée en fait un dossier dans ce dossier en utilisant le même nom et déplace le PDF en elle, ne sais pas où il va mal, mais c'est le résultat que je reçois – bzzWomp

+0

OK bien que je Je suis sûr que vous êtes prêt et capable de résoudre le problème à partir d'ici. Passez simplement par 'pdb' ou ajoutez un paquet d'instructions' print' et déboguez-le. –

+0

Haha ouais je le ferai, merci – bzzWomp