J'ai un problème avec ce code. J'essaie de renommer tous les noms de fichiers d'un dossier afin qu'ils n'aient plus +'s
en eux! Cela a fonctionné plusieurs fois auparavant, mais soudain, je reçois l'erreur:
WindowsError: [Error 2] The system cannot find the file specified at line 26
La ligne 26 est la dernière ligne du code.
Est-ce que quelqu'un sait pourquoi cela se produit? Je viens de promettre à quelqu'un que je pourrais le faire en 5 minutes parce que j'avais un code! Dommage que ça ne marche pas !!
import os, glob, sys
folder = "C:\\Documents and Settings\\DuffA\\Bureaublad\\Johan\\10G304655_1"
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
filename = os.path.join(root, filename)
old = "+"
new = "_"
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
if old in filename:
print (filename)
os.rename(filename, filename.replace(old,new))
Je soupçonne que vous pourriez avoir des problèmes avec les sous-répertoires.
Si vous avez un répertoire avec les fichiers "a
", "b
" et un sous-répertoire "dir
" avec les fichiers "sub+1
" Et "sub+2
", l'appel à os.walk()
donnera les valeurs suivantes:
(('.',), ('dir',), ('a', 'b'))
(('dir',), (,), ('sub+1', 'sub+2'))
Lorsque vous traitez le second Tuple, vous appelez rename()
avec 'sub+1', 'sub_1'
Comme arguments, lorsque vous voulez 'dir\sub+1', 'dir\sub_1'
.
Pour résoudre ce problème, changez la boucle de votre code en:
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
filename = os.path.join(root, filename)
... process file here
qui concaténera le répertoire avec le nom de fichier avant de faire quoi que ce soit avec lui.
Modifier:
Je pense que ce qui précède est la bonne réponse, mais pas tout à fait la bonne raison.
En supposant que vous ayez un fichier "File+1
" Dans le répertoire, os.walk()
renverra
("C:/Documents and Settings/DuffA/Bureaublad/Johan/10G304655_1/", (,), ("File+1",))
À moins que vous ne soyez dans le répertoire "10G304655_1
", Lorsque vous appelez rename()
, le fichier "File+1
" Ne sera pas trouvé dans le répertoire actuel , car ce n'est pas la même chose que le répertoire os.walk()
recherche. En faisant l'appel à os.path.join()
yuo dit à renommer regardez dans le bon répertoire.
Modifier 2
Un exemple du code requis pourrait être:
import os
# Use a raw string, to reduce errors with \ characters.
folder = r"C:\Documents and Settings\DuffA\Bureaublad\Johan\10G304655_1"
old = '+'
new = '_'
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
if old in filename: # If a '+' in the filename
filename = os.path.join(root, filename) # Get the absolute path to the file.
print (filename)
os.rename(filename, filename.replace(old,new)) # Rename the file
Vous utilisez splitext
pour déterminer le nom de fichier source à renommer:
filename_split = os.path.splitext(filename) # filename and extensionname (extension in [1])
filename_zero = filename_split[0]#
...
os.rename(filename_zero, filename_zero.replace('+','_'))
Si vous rencontrez un fichier avec une extension, évidemment, essayer de renommer le nom de fichier sans l'extension entraînera une erreur "fichier introuvable".