2017-05-24 3 views
0

J'essaie de renommer les fichiers dans un répertoire de façon à ce que le nouveau nom soit le nom d'origine suivi d'un espace + "17-" + un nombre croissant de façon incrémentielle.Renommer les fichiers par lots en Python 2.7

Le code ci-dessous ne fait que renommer les fichiers de 151, vers le haut. Comment conserver le nom d'origine, en ajoutant le texte "17-" et les chiffres?

import os 
path = 'C:\Users\dcs\Desktop\Test direct' 
files = os.listdir(path) 
i = 151 

for file in files: 
    os.rename(os.path.join(path, file), os.path.join(path, str(i)+'.TIF')) 
    i = i+1 

Répondre

1

Simplement en écrivant cette expression de concaténation. Si je comprends bien vos coordonnées, votre nouveau corps de la boucle serait

new_name = file + " 17-" + str(i) + ".TIF" 
os.rename(os.path.join(path, file), 
      os.path.join(path, new_name)) 
i += 1 

Cela changerait le fichier « ABC » dans le fichier « ABC 17-151.TIF »; le prochain contiendrait "17-152", et ainsi de suite.

FACEPALM

file est un type intégré. Changez l'index de boucle.

for fname in files: 
    new_name = fname + " 17-" + str(i) + ".TIF" 
    os.rename(os.path.join(path, fname), new_name) 
    i += 1 
+0

Est-ce que 'file' est toujours une chaîne? Essayez 'type d'impression (fichier) juste avant la commande' renommer '. Sur mon Python, 'listdir' renvoie une liste de chaînes. – Prune

+0

C'est vraiment étrange: 'file' est un type générique * ?? Je ne peux pas reproduire cela avec votre code. J'ai essayé ma solution dans mon répertoire local, et cela fonctionne comme prévu, en donnant '' pour le type de variable. Qu'est-ce que Python? Avez-vous coupé et collé ce code dans votre environnement pour vous assurer que nous exécutons la même chose? Tout ce que je faisais était de remplacer votre chemin par "." et désactiver la commande 'renommer '. – Prune

+0

'fname' est défini dans l'instruction' for'. – Prune

0

Si je comprends la suggestion de pruneau ci-dessus, que je ne évidemment pas, il ressemblerait à ceci:

import os 
path = 'C:\Users\dcs\Desktop\Test direct' 
files = os.listdir(path) 
i = 151 

#The part that I want to strip the extensions from 
for file in files: 
    new_name = file[:-3] 

#The part that words correctly (thanks Prune) 
for fname in files: 
    new_name = fname + " 17-" + str(i) + ".TIF" 
    os.rename(os.path.join(path, fname), new_name) 
    i += 1 

Cependant, la première partie, destinée à dépouiller le fichier de son extension ne fonctionne pas .