[RESOLU] Script simple mais complexe - Renomage de masse


#~*~ UTF-8 ~*~

from os import *
from string import capitalize, lower

liste_titres = listdir(".")


def minimise(mot):
        return lower(mot[0])+mot[1:]

def minimisePhrase(phrase):
        lMots=phrase.split(" ")
        phrase=capitalize(lMots[0])
        for mot in lMots[1:]:
                phrase=phrase+" "+minimise(mot)
        return phrase


for titre in liste_titres :
        #recherche de la sequence " - " qui separe l'artiste du titre
        a=titre.find(" - ")
        artiste=titre[:a]
        chanson=titre[a+3:]

        #recherche du caractere   (espace) qui separe (eventuellement) les deux occurences de artiste
        lComposants=artiste.split(" ")
        l=len(lComposants)
        doublon=True
        if l%2==0 :
                for i in range(l/2):
                        if capitalize(lComposants[i])!=capitalize(lComposants[i+l/2]):
                                doublon=False
        else :
                doublon=False

        if doublon :
                lUtile=range(l/2)
        else:
                lUtile=range(l)
        artiste=""
        for i in lUtile:
                artiste=artiste+" "+lComposants[i]
        nomfichier=artiste+" - "+minimisePhrase(chanson)
        print nomfichier

Excellent :jap: :love: :love:
Avant dernière question : comment on fait la fonction rename en python ?

… rename… :ane:
rename(source, destination)

ici

fabrice@luigifab:~$ '/media/gros_docs/test.pl' 
 Olivia Ruiz - La femme chocolat.mp3
Traceback (most recent call last):
  File "/media/gros_docs/test.pl", line 46, in ?
    rename(titre, nomfichier)
OSError: [Errno 2] No such file or directory

avec :

rename(titre, nomfichier)

Ça doit pas être ça :confused:

Heu … ben moi ça marche :??:
rename(titre, nomfichier)



#~*~ UTF-8 ~*~

from os import *
from string import capitalize, lower

liste_titres = listdir(".")


def minimise(mot):
        return lower(mot[0])+mot[1:]
def minimisePhrase(phrase):
        lMots=phrase.split(" ")
        phrase=capitalize(lMots[0])
        for mot in lMots[1:]:
                phrase=phrase+" "+minimise(mot)
        return phrase


for titre in liste_titres :
        #recherche de la sequence " - " qui separe l'artiste du titre
        a=titre.find(" - ")
        artiste=titre[:a]
        chanson=titre[a+3:]

        #recherche du caractere   (espace) qui separe (eventuellement) les deux occurences de artiste
        lComposants=artiste.split(" ")
        l=len(lComposants)
        doublon=True
        if l%2==0 :
                for i in range(l/2):
                        if capitalize(lComposants[i])!=capitalize(lComposants[i+l/2]):
                                doublon=False
        else :
                doublon=False

        if doublon :
                lUtile=range(l/2)
        else:
                lUtile=range(l)
        artiste=""
        for i in lUtile:
                artiste=artiste+" "+lComposants[i]
        nomfichier=artiste+" "+artiste+" - "+minimisePhrase(chanson)
        rename(titre, nomfichier)

Tu es sûr d’avoir le même alignement que moi (alignement à gauche ?). C’est TRES important en python (Base de la syntaxe)

Pour la syntaxe je m’en suis douté ^^

:ane: :ane: que je suis
Faut faire un cd et lancer le script
Moi j’avais modifier ça : liste_titres = listdir(".")

Par contre le script ajoute un espace au début du non du fichier. :frowning:

Change les lignes 42-44:


artiste=lComposants[0]
        for i in lUtile[1:]:
                artiste=artiste+" "+lComposants[i]


#~*~ UTF-8 ~*~

from os import *
from string import capitalize, lower

liste_titres = listdir(".")


def minimise(mot):
        return lower(mot[0])+mot[1:]

def minimisePhrase(phrase):
        lMots=phrase.split(" ")
        phrase=capitalize(lMots[0])
        for mot in lMots[1:]:
                phrase=phrase+" "+minimise(mot)
        return phrase


for titre in liste_titres :
        #recherche de la sequence " - " qui separe l'artiste du titre
        a=titre.find(" - ")
        artiste=titre[:a]
        chanson=titre[a+3:]

        #recherche du caractere   (espace) qui separe (eventuellement) les deux occurences de artiste
        lComposants=artiste.split(" ")
        l=len(lComposants)
        doublon=True
        if l%2==0 :
                for i in range(l/2):
                        if capitalize(lComposants[i])!=capitalize(lComposants[i+l/2]):
                                doublon=False
        else :
                doublon=False

        if doublon :
                lUtile=range(l/2)
        else:
                lUtile=range(l)
        artiste=lComposants[0]
        for i in lUtile[1:]:
                artiste=artiste+" "+lComposants[i]
        nomfichier=artiste+" - "+minimisePhrase(chanson)
        rename(titre, nomfichier)

/me :love: :love: :love: v_atekor
Grand merci à toi v_atekor

Le script fonctionne correctement cependant, il se renomme lui même en test.p - St.pl (nom d’origine : test.pl).

Dernière question : est ce qu’il est possible d’effacer les tags pour pouvoir ajouter uniquement le titre de la chanson et l’auteur avec python ?

oui, quand on fait le parcourt du répertoire au début, il faut sélectionner *.mp3 par exemple, et non *

2/ oui - Normalement tu peux faire tout avec python. C’est plus ou moins compliqué :wink:

Les tags sont où? Dans le fichier? Si tu sais à quelle position du fichier c’est alors on peut le faire aussi. Il faudrait voir la gueule de la structure d’un fichier mp3 si tu l’as sous la main.

Edit: je viens de voir la structure des tags ID3, c’est jouable.

y’a surement une librairie pour faire facilement…
en perl en tout cas, y’en a.
Et y’a pas deja une appli sous linux pour ca ??? j’en ai deja utilise une qui etait vraiment super (capable d’aller chercher les tags sur le net en fonction du nom du fichier ou de qq infos entrees a la main) et renommage du fichier suivant un modele particulier si besoin.
Mais je me souviens plus du mon :ane:

Oui, c’est très possible qu’il y ait des bibliothèques pour faire ça* … et aussi des softs tout prêts pour modfier les noms des titres :slight_smile:

*C’est mon côté “bas niveau manipulateur de bit” qui refait surface :ane:

Il me semble aussi qu’il y a un logiciel qui fait ça (pour les tags id3).
Exaile ne le fait pas, AmaroK le fait si je m’en souvient bien.

EasyTAG le fait bien et sans console [:shy]

Easy tag est cool :love: