soit le script ci-dessous qui est censé renommer tous les fichiers et
répertoires dont le nom contient des espaces par le même nom, mais en
ayant remplacé l'espace par un underscore.
Mon problème est que si je lance une fois le script, il fonctionne bien.
Le renommage est effectué.
Si je le repasse une seconde fois, alors j'ai une exception qui est levée.
Je ne comprends pas pourquoi.
Pouriez-vous m'aider un peu s'il vous plait?
for (root, dirs, files) in os.walk('/tmp/oswalk/'):
for a_file in files:
os.rename(opj(root, a_file),opj(root, a_file).replace(' ','_'))
for a_dir in dirs:
os.rename(opj(root, a_dir),opj(root, a_dir).replace(' ','_'))
L'Exception lors du second passage:
(ipython)
In [33]: %run walk.py
---------------------------------------------------------------------------
exceptions.OSError Traceback (most recent call last)
/home/mihamina/walk.py
10 for (root, dirs, files) in os.walk('/tmp/oswalk/'):
11 for a_file in files:
---> 12 os.rename(opj(root, a_file),opj(root, a_file).replace('a','e'))
13 for a_dir in dirs:
14 os.rename(opj(root, a_dir),opj(root, a_dir).replace('-','_'))
OSError: [Errno 2] No such file or directory
WARNING: Failure executing file: <walk.py>
--
SPIP, phpNuke, Plone, opengroupware... c'est bien
CPS c'est mieux: http://www.cps-project.org/
Hébergement de sites CPS: http://www.objectis.org/
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
R12y
Bonsoir,
Donc je donne quand même pourquoi et comment ça c'est fini:
D'une part, l'erreur venait du fait que le renommage se faisait en commençant de la racine vers les feuilles. (AKA "topdown")
Non pas que j'ai cherché à faire ça topdown, mais plutot que j'apprenais en même temps aussi à manipuler la séquence retournée par os.walk. La liste des (root, dirs, files) s'établissait au début de la séquence de renommage (la boucle for). Il se trouve donc qu'une fois la racine renommée, la séquence était complètement fausse. C'était la cause du "File not found".
Il fallait donc renommer les fichiers, dont on était sûr qu'il sont les extrémités de l'arborescence, ça c'est facile, il suffisait dee récupérer le nom de tout ce qui est fichier, que le parcours soit en topdown ou pas.
Par contre pour les répertoires, il faut s'assurer que le parcours est _downtop_. Et là c'est par l'expérimentation que c'est passé.
Donc voici le code:
import os, os.path, string, sys
opj = os.path.join sa = sys.argv
# renommage des "feuilles" d'abord. for (root, dirs, files) in os.walk(sa[1], topdownúlse): for a_file in files: # Pour ne pas faire des lignes trop longues old=opj(root, a_file) new=opj(root, a_file.replace(sa[2],sa[3])) os.rename(old,new) ###################################
# renommage en remontant des répertoires for (root, dirs, files) in os.walk(sa[1], topdownúlse): for a_dir in dirs: old=opj(root, a_dir) new=opj(root, a_dir.replace(sa[2],sa[3])) os.rename(old,new) ########################################
-- SPIP, phpNuke, Plone, opengroupware... c'est bien CPS c'est mieux: http://www.cps-project.org/ Hébergement de sites CPS: http://www.objectis.org/
Bonsoir,
Donc je donne quand même pourquoi et comment ça c'est fini:
D'une part, l'erreur venait du fait que le renommage se faisait en
commençant de la racine vers les feuilles. (AKA "topdown")
Non pas que j'ai cherché à faire ça topdown, mais plutot que j'apprenais
en même temps aussi à manipuler la séquence retournée par os.walk. La
liste des (root, dirs, files) s'établissait au début de la séquence de
renommage (la boucle for).
Il se trouve donc qu'une fois la racine renommée, la séquence était
complètement fausse. C'était la cause du "File not found".
Il fallait donc renommer les fichiers, dont on était sûr qu'il sont les
extrémités de l'arborescence, ça c'est facile, il suffisait dee récupérer
le nom de tout ce qui est fichier, que le parcours soit en topdown ou pas.
Par contre pour les répertoires, il faut s'assurer que le parcours est
_downtop_. Et là c'est par l'expérimentation que c'est passé.
Donc voici le code:
import os, os.path, string, sys
opj = os.path.join
sa = sys.argv
# renommage des "feuilles" d'abord.
for (root, dirs, files) in os.walk(sa[1], topdownúlse):
for a_file in files:
# Pour ne pas faire des lignes trop longues
old=opj(root, a_file)
new=opj(root, a_file.replace(sa[2],sa[3]))
os.rename(old,new)
###################################
# renommage en remontant des répertoires
for (root, dirs, files) in os.walk(sa[1], topdownúlse):
for a_dir in dirs:
old=opj(root, a_dir)
new=opj(root, a_dir.replace(sa[2],sa[3]))
os.rename(old,new)
########################################
--
SPIP, phpNuke, Plone, opengroupware... c'est bien
CPS c'est mieux: http://www.cps-project.org/
Hébergement de sites CPS: http://www.objectis.org/
Donc je donne quand même pourquoi et comment ça c'est fini:
D'une part, l'erreur venait du fait que le renommage se faisait en commençant de la racine vers les feuilles. (AKA "topdown")
Non pas que j'ai cherché à faire ça topdown, mais plutot que j'apprenais en même temps aussi à manipuler la séquence retournée par os.walk. La liste des (root, dirs, files) s'établissait au début de la séquence de renommage (la boucle for). Il se trouve donc qu'une fois la racine renommée, la séquence était complètement fausse. C'était la cause du "File not found".
Il fallait donc renommer les fichiers, dont on était sûr qu'il sont les extrémités de l'arborescence, ça c'est facile, il suffisait dee récupérer le nom de tout ce qui est fichier, que le parcours soit en topdown ou pas.
Par contre pour les répertoires, il faut s'assurer que le parcours est _downtop_. Et là c'est par l'expérimentation que c'est passé.
Donc voici le code:
import os, os.path, string, sys
opj = os.path.join sa = sys.argv
# renommage des "feuilles" d'abord. for (root, dirs, files) in os.walk(sa[1], topdownúlse): for a_file in files: # Pour ne pas faire des lignes trop longues old=opj(root, a_file) new=opj(root, a_file.replace(sa[2],sa[3])) os.rename(old,new) ###################################
# renommage en remontant des répertoires for (root, dirs, files) in os.walk(sa[1], topdownúlse): for a_dir in dirs: old=opj(root, a_dir) new=opj(root, a_dir.replace(sa[2],sa[3])) os.rename(old,new) ########################################
-- SPIP, phpNuke, Plone, opengroupware... c'est bien CPS c'est mieux: http://www.cps-project.org/ Hébergement de sites CPS: http://www.objectis.org/