Les deux révisions précédentes
Révision précédente
Prochaine révision
|
Révision précédente
|
renommer_mp3 [2010/01/21 07:24] tyrtamos |
renommer_mp3 [2010/01/21 08:02] tyrtamos |
</code> | </code> |
| |
Dans ce cas, par rapport au contenu des tags id3, le programme a par exemple transformé les espaces en '_', éliminé les accents ('é' => 'e') et supprimé les '"' qui aurait déclenché une erreur au renommage. | Dans ce cas, par rapport au contenu des tags id3, le programme a par exemple transformé les espaces en '_', éliminé les accents ('é' => 'e') et supprimé les '"' qui auraient déclenché une erreur au renommage. |
| |
La phase de la proposition est là pour ça: il est possible que ces tags id3 contiennent encore des caractères interdits ou non souhaités dans les noms de fichier. Il faudra dans ce cas ajouter les corrections à faire dans le code de la fonction modifcar(). | La phase de la proposition est là pour ça: il est possible que ces tags id3 contiennent encore des caractères interdits ou non souhaités dans les noms de fichier. Il faudra dans ce cas ajouter les corrections à faire dans le code de la fonction modifcar(). Et si, après acceptation, une erreur de renommage stoppe l'exécution en cours, ce n'est pas grave: il faut comprendre pourquoi (quel caractère interdit ais-je oublié?), ajouter la nouvelle correction à faire dans les ch1 et ch2 de la fonction modifcar() et recommencer. |
| |
==== Lecture des fichiers du répertoire ==== | ==== Lecture des fichiers du répertoire ==== |
""" | """ |
global codesource | global codesource |
ch1 = (r""" /&"?.,:;!""" + \ | ch1 = r''' /&"?.,:;!àÀâÂçÇéÉèÈêÊëËîÎïÏôÔùÙûÛüÜÿŸ'''.decode(codesource) |
r"""àÀâÂçÇéÉèÈêÊëËîÎïÏôÔùÙûÛüÜÿŸ""").decode(codesource) | ch2 = r'''_-xxxxxxxxaAaAcCeEeEeEeEiIiIoOuUuUuUyY'''.decode(codesource) |
ch2 = (r"""_-xxxxxxxx""" + \ | |
r"""aAaAcCeEeEeEeEiIiIoOuUuUuUyY""").decode(codesource) | |
s = "" | s = "" |
for c in ch: | for c in ch: |
return s | return s |
</code> | </code> |
| |
| On pourrait facilement modifier ce code pour lui faire traiter des situations plus complexes. Par exemple que le 'æ' soit transformé en 'ae', donc qu'un seul caractère en donne 2. Il faudrait, bien entendu, remplacer les chaines ch1 et ch2 par des listes de chaines, ch1 devenant une liste de caractères. Par contre, pour trouver avec ch1 des 'motifs' composés de plusieurs caractères, ce serait un peu plus compliqué à faire (et cependant faisable!). |
| |
==== Fonction d'affichage ==== | ==== Fonction d'affichage ==== |
| |
| Cette fonction d'affichage remplace le print, en corrigeant les encodages pour un affichage correct dans la console en cours. |
| |
| Grâce à l'argument '*ch', on peut l'utiliser comme print: affiche(chaine1, chaine2, chaine3) |
| |
Comme le présent code s'exécute en console, il faut prévoir que la console utilisée a un encodage spécifique, donc une représentation spécifique des mêmes caractères, voire un échec dans l'affichage qui stoppe le programme. Par exemple, la console DOS de Windows a un encodage 'cp850', la console Linux est en général en 'utf-8', etc... Et l'encodage de la console en cours est donnée par sys.stdout.encoding. | Comme le présent code s'exécute en console, il faut prévoir que la console utilisée a un encodage spécifique, donc une représentation spécifique des mêmes caractères, voire un échec dans l'affichage qui stoppe le programme. Par exemple, la console DOS de Windows a un encodage 'cp850', la console Linux est en général en 'utf-8', etc... Et l'encodage de la console en cours est donnée par sys.stdout.encoding. |
</code> | </code> |
| |
Cette fonction d'affichage remplace le print, en corrigeant les encodages pour un affichage correct dans la console en cours. | Bien entendu, si on devait, pour un autre usage, utiliser cette même fonction pour afficher une chaine avec un autre encodage, par exemple 'latin-1', sans que ça coïncide avec le coding du code (chaine issue d'un fichier disque par exemple), il faudrait d'abord convertir cette chaine en unicode interne avec decode(). Par exemple pour la chaine 'chaine2': |
| |
Grâce à l'argument '*ch', on peut l'utiliser comme print: affiche(chaine1, chaine2, chaine3) | <code python> |
| affiche(chaine1, chaine2.decode('latin-1'), chaine3) |
| </code> |
| |
==== Fonction de récupération du code d'erreur ==== | ==== Fonction de récupération du code d'erreur ==== |
""" | """ |
global codesource | global codesource |
ch1 = (r""" /&"?.,:;!""" + \ | ch1 = r''' /&"?.,:;!àÀâÂçÇéÉèÈêÊëËîÎïÏôÔùÙûÛüÜÿŸ'''.decode(codesource) |
r"""àÀâÂçÇéÉèÈêÊëËîÎïÏôÔùÙûÛüÜÿŸ""").decode(codesource) | ch2 = r'''_-xxxxxxxxaAaAcCeEeEeEeEiIiIoOuUuUuUyY'''.decode(codesource) |
ch2 = (r"""_-xxxxxxxx""" + \ | |
r"""aAaAcCeEeEeEeEiIiIoOuUuUuUyY""").decode(codesource) | |
s = "" | s = "" |
for c in ch: | for c in ch: |