Bonjour,
Je cherche depuis quelques temps à parcourir un ensemble de répertoires et
sous répertoires pour effectuer des remplacements de caractères accentués par
des caractères sans accents et des caractères vides par des "_". J'ai utilisé
et adapté un script de JCB (excellent) qui permet d'effectuer ces actions sur
un répertoire à la fois - il y a des centaines de répertoires ! - Je
souhaiterais donc parcourir l'ensemble du répertoire principale en une seule
fois mais mes connaissances sont limitées et ma cervelle de piaf ne turbine
pas des masses !
Merci d'avance pour vos conseils.
Dan
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
Do Re Mi chel La Si Do
Bonsoir !
Juste une question : que devra faire ton script, s'il rencontre un fichier dont le nom est en unicode ?
Je cite ce cas, car j'ai dû, récemment, faire un script similaire : rendre un ensemble de répertoires et de fichiers compatibles avec le WEB et le FTP. Et, bien sûr, je suis tombé sur des fichiers en Unicode. Travaillant avec Python, la solution a été assez facile. Mains, en VBS, j'ai un doute.
@-salutations
Michel Claveau
Bonsoir !
Juste une question : que devra faire ton script, s'il rencontre un fichier
dont le nom est en unicode ?
Je cite ce cas, car j'ai dû, récemment, faire un script similaire : rendre
un ensemble de répertoires et de fichiers compatibles avec le WEB et le FTP.
Et, bien sûr, je suis tombé sur des fichiers en Unicode. Travaillant avec
Python, la solution a été assez facile. Mains, en VBS, j'ai un doute.
Juste une question : que devra faire ton script, s'il rencontre un fichier dont le nom est en unicode ?
Je cite ce cas, car j'ai dû, récemment, faire un script similaire : rendre un ensemble de répertoires et de fichiers compatibles avec le WEB et le FTP. Et, bien sûr, je suis tombé sur des fichiers en Unicode. Travaillant avec Python, la solution a été assez facile. Mains, en VBS, j'ai un doute.
@-salutations
Michel Claveau
Fred
Dans : news:%, Do Re Mi chel La Si Do disait :
Bonsoir !
Bonsoir,
... Et, bien sûr, je suis tombé sur des fichiers en Unicode. Travaillant avec Python, la solution a été assez facile. Mais, en VBS, j'ai un doute.
Un doute sur quoi ? Le FileSystemObject renvoie bien les noms de fichier unicode. En particulier, un : MsgBox oFile.Name affiche bien le nom du fichier tel qu'il apparaît dans l'explorateur Windows. Si tu parles de la conversion de ce nom de fichier, et qu'il existe sous Python une fonction de conversion, je suis intéressé pour en connaître le principe.
Sinon, pour apporter au moins une piste de réponse pour Dan, je dirais que nous sommes dans le cas d'un problème récursif qui peut se résoudre avec une procédure du type :
8<------------- Sub Traitement(oFolder) For Each oFile In oFolder.Files Convertir oFile Next For Each oSubFolder In oFolder.SubFolders Traitement oSubFolder Next End Sub 8<-------------
La procédure de conversion pourrait ressembler à cela : 8<-------------- Sub Convertir(oFile) If Instr(oFile.Name, " ")<>0 Then oFile.Name=Replace(oFile.Name, " ", "_") End If 'etc .... pour chaque remplacement à effectuer End Sub 8<--------------
Le programme principal serait alors :
sFolder="C:chemindurépertoireàtraiter" Set oFSO=CreateObject("Scripting.FileSystemObject") Traitement oFSO.GetFolder(sFolder)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Dans : news:%23Gerlo3xFHA.448@TK2MSFTNGP11.phx.gbl,
Do Re Mi chel La Si Do disait :
Bonsoir !
Bonsoir,
... Et, bien sûr, je suis tombé sur des fichiers en
Unicode. Travaillant avec Python, la solution a été assez facile.
Mais, en VBS, j'ai un doute.
Un doute sur quoi ? Le FileSystemObject renvoie bien les noms de fichier
unicode.
En particulier, un :
MsgBox oFile.Name
affiche bien le nom du fichier tel qu'il apparaît dans l'explorateur
Windows.
Si tu parles de la conversion de ce nom de fichier, et qu'il existe sous
Python une fonction de conversion, je suis intéressé pour en connaître
le principe.
Sinon, pour apporter au moins une piste de réponse pour Dan, je dirais
que nous sommes dans le cas d'un problème récursif qui peut se résoudre
avec une procédure du type :
8<-------------
Sub Traitement(oFolder)
For Each oFile In oFolder.Files
Convertir oFile
Next
For Each oSubFolder In oFolder.SubFolders
Traitement oSubFolder
Next
End Sub
8<-------------
La procédure de conversion pourrait ressembler à cela :
8<--------------
Sub Convertir(oFile)
If Instr(oFile.Name, " ")<>0 Then
oFile.Name=Replace(oFile.Name, " ", "_")
End If
'etc .... pour chaque remplacement à effectuer
End Sub
8<--------------
Le programme principal serait alors :
sFolder="C:chemindurépertoireàtraiter"
Set oFSO=CreateObject("Scripting.FileSystemObject")
Traitement oFSO.GetFolder(sFolder)
... Et, bien sûr, je suis tombé sur des fichiers en Unicode. Travaillant avec Python, la solution a été assez facile. Mais, en VBS, j'ai un doute.
Un doute sur quoi ? Le FileSystemObject renvoie bien les noms de fichier unicode. En particulier, un : MsgBox oFile.Name affiche bien le nom du fichier tel qu'il apparaît dans l'explorateur Windows. Si tu parles de la conversion de ce nom de fichier, et qu'il existe sous Python une fonction de conversion, je suis intéressé pour en connaître le principe.
Sinon, pour apporter au moins une piste de réponse pour Dan, je dirais que nous sommes dans le cas d'un problème récursif qui peut se résoudre avec une procédure du type :
8<------------- Sub Traitement(oFolder) For Each oFile In oFolder.Files Convertir oFile Next For Each oSubFolder In oFolder.SubFolders Traitement oSubFolder Next End Sub 8<-------------
La procédure de conversion pourrait ressembler à cela : 8<-------------- Sub Convertir(oFile) If Instr(oFile.Name, " ")<>0 Then oFile.Name=Replace(oFile.Name, " ", "_") End If 'etc .... pour chaque remplacement à effectuer End Sub 8<--------------
Le programme principal serait alors :
sFolder="C:chemindurépertoireàtraiter" Set oFSO=CreateObject("Scripting.FileSystemObject") Traitement oFSO.GetFolder(sFolder)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Do Re Mi chel La Si Do
Bonjour !
Renommer un fichier en Unicode, avec Python, est très simple. Il suffit que le "path" traité soit en Unicode.
Exemple, le script ci-dessous va renommer le premier fichier (rencontré) du répertoire C:u en lui donnant un nom composé de 3 "N inversé" (caractère cyrillique n° 1048). Avec les commentaires, ça devrait rester compréhensible.
@+
Michel Claveau
import os
fic=os.listdir(u'C:u')[0] # on ne va traiter que le fichier fichier [0] ; le u avant le ' indique de l'unicode nouveaunom=unichr(1048)+unichr(1048)+unichr(1048)+unichr(46) #3 fois le caractère U+1048, suivi d'un point (46)
anciennomcomplet=u'C:u'+fic #on ajoute le répertoire nouveaunomcomplet=u'C:u'+nouveaunom #pareil
Renommer un fichier en Unicode, avec Python, est très simple. Il suffit que
le "path" traité soit en Unicode.
Exemple, le script ci-dessous va renommer le premier fichier (rencontré) du
répertoire C:u en lui donnant un nom composé de 3 "N inversé" (caractère
cyrillique n° 1048).
Avec les commentaires, ça devrait rester compréhensible.
@+
Michel Claveau
import os
fic=os.listdir(u'C:\u')[0] # on ne va traiter que le fichier fichier [0]
; le u avant le ' indique de l'unicode
nouveaunom=unichr(1048)+unichr(1048)+unichr(1048)+unichr(46) #3 fois le
caractère U+1048, suivi d'un point (46)
anciennomcomplet=u'C:\u\'+fic #on ajoute le répertoire
nouveaunomcomplet=u'C:\u\'+nouveaunom #pareil
Renommer un fichier en Unicode, avec Python, est très simple. Il suffit que le "path" traité soit en Unicode.
Exemple, le script ci-dessous va renommer le premier fichier (rencontré) du répertoire C:u en lui donnant un nom composé de 3 "N inversé" (caractère cyrillique n° 1048). Avec les commentaires, ça devrait rester compréhensible.
@+
Michel Claveau
import os
fic=os.listdir(u'C:u')[0] # on ne va traiter que le fichier fichier [0] ; le u avant le ' indique de l'unicode nouveaunom=unichr(1048)+unichr(1048)+unichr(1048)+unichr(46) #3 fois le caractère U+1048, suivi d'un point (46)
anciennomcomplet=u'C:u'+fic #on ajoute le répertoire nouveaunomcomplet=u'C:u'+nouveaunom #pareil
Pour être plus complet, voici, ci-dessous, une fonction Python qui remplace les caractères Unicode accentués, par les caractères non accentués.
Cette fonction utilise la "décomposition unicode" des caractères. Dans Unicode, les caractères accentués sont composés d'un caractère de base, auquel on ajoute un, ou des, glyphe(s). Le décomposition unicode retourne la liste des caractères Unicode utilisés, le premier étant le caractère de base. La fonction interne de Python qui fait cela s'appelle : unicodedata.decomposition.
Cette fonction, n'est pas de moi, mais je l'ai adoptée, et adaptée.
Michel Claveau
import unicodedata
def enleveAccent(uchaine): uret=u'' for car in uchaine: dec = unicodedata.decomposition(car) if dec: uret+=unichr(int(dec.split()[0],16)) else: uret+Êr return uret
s = u"eêçañël" print enleveAccent(s)
Re
Pour être plus complet, voici, ci-dessous, une fonction Python qui remplace
les caractères Unicode accentués, par les caractères non accentués.
Cette fonction utilise la "décomposition unicode" des caractères. Dans
Unicode, les caractères accentués sont composés d'un caractère de base,
auquel on ajoute un, ou des, glyphe(s). Le décomposition unicode retourne la
liste des caractères Unicode utilisés, le premier étant le caractère de
base. La fonction interne de Python qui fait cela s'appelle :
unicodedata.decomposition.
Cette fonction, n'est pas de moi, mais je l'ai adoptée, et adaptée.
Michel Claveau
import unicodedata
def enleveAccent(uchaine):
uret=u''
for car in uchaine:
dec = unicodedata.decomposition(car)
if dec:
uret+=unichr(int(dec.split()[0],16))
else:
uret+Êr
return uret
Pour être plus complet, voici, ci-dessous, une fonction Python qui remplace les caractères Unicode accentués, par les caractères non accentués.
Cette fonction utilise la "décomposition unicode" des caractères. Dans Unicode, les caractères accentués sont composés d'un caractère de base, auquel on ajoute un, ou des, glyphe(s). Le décomposition unicode retourne la liste des caractères Unicode utilisés, le premier étant le caractère de base. La fonction interne de Python qui fait cela s'appelle : unicodedata.decomposition.
Cette fonction, n'est pas de moi, mais je l'ai adoptée, et adaptée.
Michel Claveau
import unicodedata
def enleveAccent(uchaine): uret=u'' for car in uchaine: dec = unicodedata.decomposition(car) if dec: uret+=unichr(int(dec.split()[0],16)) else: uret+Êr return uret
s = u"eêçañël" print enleveAccent(s)
Fred
Dans : news:%23SbfYW$, Do Re Mi chel La Si Do disait :
Re
Bonsoir,
Pour être plus complet, voici, ci-dessous, une fonction Python qui remplace les caractères Unicode accentués, par les caractères non accentués.
Oui, c'est bien à ce type de conversion auquel je pensais. Et là, effectivement, je ne pense pas que cela peut se faire (directement) en vbs. Je n'ai pas assez étudié la décomposition des caractères Unicode pour me rendre compte si on peut faire une fonction analogue à unicodedata.decomposition(car). Probablement oui. En fait, c'est une question que j'ai vue sur les groupes consacrés à dotNET : comment enlever les accents.
Merci pour la piste de recherche :-)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Dans : news:%23SbfYW$xFHA.3892@TK2MSFTNGP12.phx.gbl,
Do Re Mi chel La Si Do disait :
Re
Bonsoir,
Pour être plus complet, voici, ci-dessous, une fonction Python qui
remplace les caractères Unicode accentués, par les caractères non
accentués.
Oui, c'est bien à ce type de conversion auquel je pensais. Et là,
effectivement, je ne pense pas que cela peut se faire (directement) en
vbs. Je n'ai pas assez étudié la décomposition des caractères Unicode
pour me rendre compte si on peut faire une fonction analogue à
unicodedata.decomposition(car). Probablement oui. En fait, c'est une
question que j'ai vue sur les groupes consacrés à dotNET : comment
enlever les accents.
Dans : news:%23SbfYW$, Do Re Mi chel La Si Do disait :
Re
Bonsoir,
Pour être plus complet, voici, ci-dessous, une fonction Python qui remplace les caractères Unicode accentués, par les caractères non accentués.
Oui, c'est bien à ce type de conversion auquel je pensais. Et là, effectivement, je ne pense pas que cela peut se faire (directement) en vbs. Je n'ai pas assez étudié la décomposition des caractères Unicode pour me rendre compte si on peut faire une fonction analogue à unicodedata.decomposition(car). Probablement oui. En fait, c'est une question que j'ai vue sur les groupes consacrés à dotNET : comment enlever les accents.
Merci pour la piste de recherche :-)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
Do Re Mi chel La Si Do
Bonsoir !
Attention, la méthode par "décomposition canonique" (je crois que c'est le terme exact) ne règle pas tout les cas. Et de loin.
Pour avoir quelques idées des problèmes, voir http://omega.enstb.org/yannis/pdf/docnum.pdf le chapitre 2.3
Disons que ça suffit pour les usages courants, dans nos contrées occidentales (plus exactement, dans les contrées où sont bien implantées des sociétés comme Microsoft, Adobe, et autres sponsors du consortium Unicode).
En pratique, la composition canonique est décrite dans des tables. Et ces données existent forcément dans Windows (avec le nom des caractères Unicode, etc.) Le tout est de savoir comment y avoir accès...
Bon courage !
@-salutations
Michel Claveau
Bonsoir !
Attention, la méthode par "décomposition canonique" (je crois que c'est le
terme exact) ne règle pas tout les cas. Et de loin.
Pour avoir quelques idées des problèmes, voir
http://omega.enstb.org/yannis/pdf/docnum.pdf le chapitre 2.3
Disons que ça suffit pour les usages courants, dans nos contrées
occidentales (plus exactement, dans les contrées où sont bien implantées des
sociétés comme Microsoft, Adobe, et autres sponsors du consortium Unicode).
En pratique, la composition canonique est décrite dans des tables. Et ces
données existent forcément dans Windows (avec le nom des caractères Unicode,
etc.) Le tout est de savoir comment y avoir accès...
Attention, la méthode par "décomposition canonique" (je crois que c'est le terme exact) ne règle pas tout les cas. Et de loin.
Pour avoir quelques idées des problèmes, voir http://omega.enstb.org/yannis/pdf/docnum.pdf le chapitre 2.3
Disons que ça suffit pour les usages courants, dans nos contrées occidentales (plus exactement, dans les contrées où sont bien implantées des sociétés comme Microsoft, Adobe, et autres sponsors du consortium Unicode).
En pratique, la composition canonique est décrite dans des tables. Et ces données existent forcément dans Windows (avec le nom des caractères Unicode, etc.) Le tout est de savoir comment y avoir accès...