web-dev-qa-db-fra.com

Renommer plusieurs fichiers dans un répertoire en utilisant Python

J'essaie de renommer plusieurs fichiers dans un répertoire à l'aide de ce script Python:

import os
path = '/Users/myName/Desktop/directory'
files = os.listdir(path)
i = 1

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

Lorsque j'exécute ce script, j'obtiens l'erreur suivante:

Traceback (most recent call last):
  File "rename.py", line 7, in <module>
    os.rename(file, str(i)+'.jpg')
OSError: [Errno 2] No such file or directory

Pourquoi donc? Comment puis-je résoudre ce problème?

Merci.

15
Simplicity

Vous ne donnez pas tout le chemin en renommant, faites-le comme ceci:

import os
path = '/Users/myName/Desktop/directory'
files = os.listdir(path)


for index, file in enumerate(files):
    os.rename(os.path.join(path, file), os.path.join(path, ''.join(str(index), '.jpg')))

Edit: Merci à tavo, La première solution déplacerait le fichier dans le répertoire courant, corrigé cela.

52
noteness

Vous devez d'abord faire de ce chemin un répertoire de travail courant. assez simple. le reste du code ne contient aucune erreur.

pour en faire un répertoire de travail actuel:

os.chdir(path)
4
Abid413119

Selon le commentaire de @ daniel, os.listdir () renvoie uniquement les noms de fichiers et non le chemin complet du fichier. Utilisez os.path.join (chemin, fichier) pour obtenir le chemin complet et le renommer.

import os
path = 'C:\\Users\\Admin\\Desktop\\Jayesh'
files = os.listdir(path)
for file in files:
   os.rename(os.path.join(path, file), os.path.join(path, 'xyz_' + file + '.csv'))
2
jayesh

Il suffit de jouer avec la réponse acceptée pour définir la variable de chemin et la liste:

path = "/Your/path/to/folder/"
files = os.listdir(path)

puis bouclez sur cette liste:

for index, file in enumerate(files):
    #print (file)
    os.rename(path+file, path +'file_' + str(index)+ '.jpg')

ou boucle de la même manière avec une ligne comme python compréhension de la liste:

[os.rename(path+file, path +'jog_' + str(index)+ '.jpg')  for index, file in enumerate(files)]

Je pense que le premier est plus lisible, dans le second la première partie de la boucle n'est que la deuxième partie de la compréhension de la liste

0
sivi

Si vos fichiers sont renommés de manière aléatoire, vous devez d'abord trier les fichiers dans le répertoire. Le code donné trie d'abord puis renomme les fichiers.

import os
import re
path = 'target_folder_directory'
files = os.listdir(path)
files.sort(key=lambda var:[int(x) if x.isdigit() else x for x in re.findall(r'[^0-9]|[0-9]+', var)])
for i, file in enumerate(files):
    os.rename(path + file, path + "{}".format(i)+".jpg")
0