Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

find-like: glob,...

6 réponses
Avatar
R12y
Bonjour,

Je souhaite faire un script python qui recherche tous les fichiers MP3 de
mon disque, et qui renomme systématiquement les fichiers qui ont des
espaces en des fichiers qui ont des '_' dans le nom.
Ex:

/tmp/blabla/le fichier.mp3
en
/tmp/blabla/le_fichier.mp3

La profondeur dans l'arbirescence du système de fichier est variable,
dans la mesure ou il y a des compilations et des artistes qui ont sortis
plusieurs albums... Je suis sous Linux.

Bref, avec find ça serait un simple:

$ find $RACINE -name '*.mp3'

Avec glob.glob(), je ne récupère que les répertoires et fichiers avec
une profondeur 1, sans posibilité d'aller plus "bas".

Si j'essaie avec os.exec*('/bin/find', racine, '-name', '*.mp3'), alors je
ne sais pas comment récupérer le résutat en liste (ou tuple).

Comment conseillez-vous de faire?

Sinon, moi en interactif, j'utilise ipython, qui permet de récupérer la
stdout sous forme de liste. Mais si je veux mettre le struc dans un
programme, ce n'est pas idéal. Et il y a environ 5000 fichers à traiter.

Merci d'avance.

PS: Ne vous en faites pas ce n'est pas du warez, je suis juste responsable
d'une webradio communautaire...


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

6 réponses

Avatar
Koollman
R12y writes:

Bonjour,

Je souhaite faire un script python qui recherche tous les fichiers MP3 de
mon disque, et qui renomme systématiquement les fichiers qui ont des
espaces en des fichiers qui ont des '_' dans le nom.
Ex:

/tmp/blabla/le fichier.mp3
en
/tmp/blabla/le_fichier.mp3

La profondeur dans l'arbirescence du système de fichier est variable,
dans la mesure ou il y a des compilations et des artistes qui ont sortis
plusieurs albums... Je suis sous Linux.

Bref, avec find ça serait un simple:

$ find $RACINE -name '*.mp3'

Avec glob.glob(), je ne récupère que les répertoires et fichiers avec
une profondeur 1, sans posibilité d'aller plus "bas".

Si j'essaie avec os.exec*('/bin/find', racine, '-name', '*.mp3'), alors je
ne sais pas comment récupérer le résutat en liste (ou tuple).

Comment conseillez-vous de faire?


Je te conseille d'utiliser os.path.walk:


from os.path import walk,join
from os import rename

racine = "/tmp"

def rename_space(arg, dir, fnames):
for name in fnames:
if name.endswith(".mp3") and " " in name:
old_name = join(dir, name)
new_name = name.replace(" ", "_")
new_name = join(dir, new_name)
print "rename ", old_name, new_name

walk(racine, rename_space, None)


(ce code devrait marcher, mais je n'ai pas teste)

--
Koollman
The trouble with computers is that they do what you tell them, not what
you want.

Avatar
tiissa
R12y wrote:
Si j'essaie avec os.exec*('/bin/find', racine, '-name', '*.mp3'), alors je
ne sais pas comment récupérer le résutat en liste (ou tuple).

Comment conseillez-vous de faire?


Regarder os.popen [1] :

########
import os

for filename in os.popen('ls -L'):
print filename,
########


[1] http://python.org/doc/2.4.1/lib/os-newstreams.html#os-newstreams

Avatar
rafi
R12y wrote:
Bonjour,

Je souhaite faire un script python qui recherche tous les fichiers MP3 de
mon disque, et qui renomme systématiquement les fichiers qui ont des
espaces en des fichiers qui ont des '_' dans le nom.
Ex:

/tmp/blabla/le fichier.mp3
en
/tmp/blabla/le_fichier.mp3

[snip]

Bref, avec find ça serait un simple:

$ find $RACINE -name '*.mp3'
[snip]


pourquoi ne pas partir du find, mettre le résultat dans un fichier que
tu parses ensuite avec ton script python?

$ find $RACINE -name *.mp3 > mp3.txt

et le script Python serait alors:

import os
input=file('mp3.txt')
for i in input:
os.rename(i, i.replace(' ', '_'))
input.close()

après tu peux faire un script exécutable qui lit la liste des fichiers
sur l'entrée standard et donc "piper" la sortie du find (philosophie unix):

$ find $RACINE -name *.mp3 | nospace.py

hth

--
rafi

"Imagination is more important than knowledge."
(Albert Einstein)

Avatar
rafi
rafi wrote:

oups, posté un peu vite: il faut faire un strip() sur le `i' sinon il
reste le 'n'

et le script Python serait alors:

import os
input=file('mp3.txt')
for i in input:
os.rename(i, i.replace(' ', '_'))
input.close()


ps et pour optimiser faire un test sur la présence d'un blanc dans le
nom du fichier (mais moi et les optimisations, même s'il y a 5000
fichier, une fois que le script a fait la manip il ne sert plus alors...)

--
rafi

"Imagination is more important than knowledge."
(Albert Einstein)

Avatar
J.Pierre Pourrez
Le Sat, 03 Sep 2005 22:59:02 +0200, R12y a écrit :

Bonjour,

Je souhaite faire un script python qui recherche tous les fichiers MP3 de
mon disque, et qui renomme systématiquement les fichiers qui ont des
espaces en des fichiers qui ont des '_' dans le nom. Ex:
.....
$ find $RACINE -name '*.mp3'


find $racine -name *.mp3 -exec rename 's/ /_/g' {} ;

Pas besoin de Python pour faire cela.

PS: Ne vous en faites pas ce n'est pas du warez, je suis juste responsable
d'une webradio communautaire...
On a droit à l'URL ?


Cordialement
Jean-Pierre

Avatar
R12y
On Sun, 04 Sep 2005 11:32:57 +0200, J.Pierre Pourrez wrote:

$ find $RACINE -name '*.mp3'
find $racine -name *.mp3 -exec rename 's/ /_/g' {} ;

Pas besoin de Python pour faire cela.


Je sais bien, tu penses...
Mais j'ai envie de le faire en python :-)

PS: Ne vous en faites pas ce n'est pas du warez, je suis juste responsable
d'une webradio communautaire...
On a droit à l'URL ?



http://taloha.rktmb.org:8000/

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