2017-08-11 5 views
0

Je tente de prendre un nom de fichier tel que 'OP 40 856101.txt' à partir d'un répertoire, supprimer le fichier .txt, définir chaque mot à une variable spécifique, puis réorganiser le nom de fichier en fonction d'une commande requise telle que '856101 OP 040'. Ci-dessous mon code:Renommer plusieurs fichiers à la fois dans un répertoire

import os 


dir = 'C:/Users/brian/Documents/Moeller' 
orig = os.listdir(dir)     #original names of the files in the folder 

for orig_name in orig:    #This loop splits each file name into a list of stings containing each word 
    f = os.path.splitext(orig_name)[0] 
    sep = f.split()    #Separation is done by a space 
    for t in sep:   #Loops across each list of strings into an if statement that saves each part to a specific variable 
     #print(t) 
     if t.isalpha() and len(t) == 3: 
      wc = t 
     elif len(t) > 3 and len(t) < 6: 
      wc = t 
     elif t == 'OP': 
      op = t 
     elif len(t) >= 4: 
      pnum = t 
     else: 
      opnum = t 
      if len(opnum) == 2: 
       opnum = '0' + opnum 
    new_nam = '%s %s %s %s' % (pnum,op,opnum, wc)   #This is the variable that contain the text for the new name 

    print("The orig filename is %r, the new filename is %r" % (orig_name, new_nam)) 
    os.rename(orig_name, new_nam) 

Cependant, je reçois une erreur de ma dernière boucle où je tente de renommer chaque fichier dans le répertoire.

FileNotFoundError: [WinError 2] The system cannot find the file specified: '150 856101 OP CLEAN.txt' -> '856101 OP 150 CLEAN' 

Le code fonctionne parfaitement jusqu'à ce que la commande os.rename(), si j'imprimer la new_nam variable, il imprime l'ordre de nommage correct pour tous les fichiers dans le répertoire. On dirait qu'il ne peut pas trouver le fichier original pour remplacer le nom de fichier par la chaîne dans new_nam. Je suppose qu'il s'agit d'un problème de répertoire, mais je suis plus récent avec python et je n'arrive pas à comprendre où modifier mon code. Tout aide ou avis sera le bienvenu!

Répondre

1

Essayez cette (juste changé la dernière ligne):

 os.rename(os.path.join(dir,orig_name), os.path.join(dir,new_nam)) 

Vous devez dire Python le chemin réel du fichier à renommer - sinon, il semble que dans le répertoire contenant ce fichier. Par ailleurs, il est préférable de ne pas utiliser dir comme nom de variable, car c'est le nom d'un built-in.

+0

A travaillé! Je vous remercie!! – Bkal05