OVH Cloud OVH Cloud

arbre, renommage de fichier, recursivite

7 réponses
Avatar
R12y
Bonjour,

J'ai un collègue qui a fait un CDRom de toute une arborescence de fichiers.
Je l'ai copué sur mon disque dur.
Mon souci c'est qu'il a la sale habitude d'avoir mis des espaces et des
caractères accentués (é,è et ê) dans les noms de fichiers.
Il y a environ 5000 fichiers avec une profondeur variable mais inférieure
à 10.
Je voudrais faire le script de renommage en Python.
Le but est de renommer les fichiers et répertoires en remplaçant les
espaces par '_' et les 'é'|'è'|'ê' par des 'e' (On ne traitera pas les
cas ou il y a risque d'écrasement).

J'ai juste l'algorithme en tête, mais je me heurte à un dilemme que je
souhaite éclaircir avant de coder.

- Recursivité ou pas? Est ce que la profondeur de 10 va péter à coup sûr
en "maximum depth recursion"?

- Voir les choses en arbres? Oui mais comme on va renommer des noeuds
(répertoires), il faudra actualiser l'arbre à chaque fois.

- Pour lister le contenu d'un répertoire, j'ai en tête glob.glob('*'). Il
y a mieux? pire?

Voilà. En fait le script servira à cet usage mais dans la mesure du
possible j'aimerais garder la possibilité de l'utiliser pour autre chose
plus tard, d'où la question sur le "maximum depth recursion".

Merci d'avance à tous ceux qui m'aiguilleront.

--
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/

7 réponses

Avatar
Bertrand B
Bonjour,

J'ai un collègue qui a fait un CDRom de toute une arborescence de fic hiers.
Je l'ai copué sur mon disque dur.
Mon souci c'est qu'il a la sale habitude d'avoir mis des espaces et des
caractères accentués (é,è et ê) dans les noms de fichiers.
Il y a environ 5000 fichiers avec une profondeur variable mais inféri eure
à 10.
Je voudrais faire le script de renommage en Python.
Le but est de renommer les fichiers et répertoires en remplaçant le s
espaces par '_' et les 'é'|'è'|'ê' par des 'e' (On ne traitera pa s les
cas ou il y a risque d'écrasement).

J'ai juste l'algorithme en tête, mais je me heurte à un dilemme que je
souhaite éclaircir avant de coder.

- Recursivité ou pas? Est ce que la profondeur de 10 va péter à c oup sûr
en "maximum depth recursion"?


C'est ce que je comencerais à faire c'est le plus simple à écrire


- Voir les choses en arbres? Oui mais comme on va renommer des noeuds
(répertoires), il faudra actualiser l'arbre à chaque fois.


Il faut commencer par les feuilles et non par le tronc.
Une manière de e faire est de descendre l'arbre de faire une liste des
noeuds de niveau 1 puis de niveau 2 puis de niveau 3 etc ...
et après de renommé l'ensemble des noeuds de niveau n puis n-1 etc .. .

Avatar
Frédéric Momméja
R12y écrivait le 28/09/05 23:09 :
Je voudrais faire le script de renommage en Python.
Le but est de renommer les fichiers et répertoires en remplaçant les
espaces par '_' et les 'é'|'è'|'ê' par des 'e' (On ne traitera pas les
cas ou il y a risque d'écrasement).


Et s'il a également mis des 'à' et des 'ç' ? ;)

J'avais demandé de l'aide dans ce même groupe en juin pour un problème
assez similaire et Amaury m'avais offert une solution extrêmement élégante.

Tu la retrouveras ici :
<http://groups.google.fr/group/fr.comp.lang.python/browse_thread/thread/7a1e4c77785abd92/4ced762ff95a2cd8?q¬centu%C3%A9&rnum=9&hl=fr#4ced762ff95a2cd8>

ou encore la même URL plus facilement cliquable :)
<http://tinyurl.com/765uu>

--
Frédéric Momméja

Avatar
ReM
Pourquoi ne pas utiliser os.walk :
http://docs.python.org/lib/os-file-dir.html
Il y a même un exemple qui fait ce que tu veux !

Bonjour,

J'ai un collègue qui a fait un CDRom de toute une arborescence de fichiers.
Je l'ai copué sur mon disque dur.
Mon souci c'est qu'il a la sale habitude d'avoir mis des espaces et des
caractères accentués (é,è et ê) dans les noms de fichiers.
Il y a environ 5000 fichiers avec une profondeur variable mais inférieure
à 10.
Je voudrais faire le script de renommage en Python.
Le but est de renommer les fichiers et répertoires en remplaçant les
espaces par '_' et les 'é'|'è'|'ê' par des 'e' (On ne traitera pas les
cas ou il y a risque d'écrasement).

J'ai juste l'algorithme en tête, mais je me heurte à un dilemme que je
souhaite éclaircir avant de coder.

- Recursivité ou pas? Est ce que la profondeur de 10 va péter à coup sûr
en "maximum depth recursion"?

- Voir les choses en arbres? Oui mais comme on va renommer des noeuds
(répertoires), il faudra actualiser l'arbre à chaque fois.

- Pour lister le contenu d'un répertoire, j'ai en tête glob.glob('*'). Il
y a mieux? pire?

Voilà. En fait le script servira à cet usage mais dans la mesure du
possible j'aimerais garder la possibilité de l'utiliser pour autre chose
plus tard, d'où la question sur le "maximum depth recursion".

Merci d'avance à tous ceux qui m'aiguilleront.



Avatar
Jerome
R12y wrote:

snip


- Recursivité ou pas? Est ce que la profondeur de 10 va péter à coup sûr
en "maximum depth recursion"?



ce que tu as à faire peut se dérecursifier très facilement avec une
liste une fois que tu auras l'algo récursif.


to_deal = [racine]

while to_deal:
el = to_deal[0]
del to_deal[0]
...
to_deal += sons(el)

par exemple

Avatar
Laurent Pointal
Frédéric Momméja wrote:
R12y écrivait le 28/09/05 23:09 :

Je voudrais faire le script de renommage en Python.
Le but est de renommer les fichiers et répertoires en remplaçant les
espaces par '_' et les 'é'|'è'|'ê' par des 'e' (On ne traitera pas les
cas ou il y a risque d'écrasement).



Et s'il a également mis des 'à' et des 'ç' ? ;)


http://wikipython.flibuste.net/moin.py/JouerAvecUnicode

Et plus précisément "4.2. Supprimer les accents":
http://wikipython.flibuste.net/moin.py/JouerAvecUnicode#head-1213938516c633958921591439c33d202244e2f4
...


Avatar
R12y
On Thu, 29 Sep 2005 09:02:04 +0200, Frédéric Momméja wrote:
Et s'il a également mis des 'à' et des 'ç' ? ;)


Si j'arrive à faire pour les différents 'e', je peux le faire pour les
autres. Je ne voulais pas surcharger l'ennoncer de mon problème c'est tout
:-)

Amaury m'avais offert une solution extrêmement
élégante.
[...]

<http://groups.google.fr/group/fr.comp.lang.python/browse_thread/thread/7a1e4c77785abd92/4ced762ff95a2cd8?q¬centu%C3%A9&rnum=9&hl=fr#4ced762ff95a2cd8>


Effectivement ça m'évite de créer mes propres functions.
Merci.
Bon je commence le codage. Je mettrai le code avec les commentaires
quelquepart quand j'aurais fini.

--
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/

Avatar
Do Re Mi chel La Si Do
Bonsoir !

Toutafé !
Et, pour une fois que le paramètre "topdown" de os.walk pourrait servir à
quelque chose, ce serait bien d'en profiter.

@-salutations

Michel Claveau