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

Minuscules accentuées

9 réponses
Avatar
pil91
Bonjour =E0 tous;
j'ai un soucis de minuscules accentu=E9es sous mon =E9diteur.

Sous Windows; je liste des fichiers et les affiches dans la console
pour controle.
Sous Notepad++ les minuscules accentu=E9es ne sont pas correctes, ex
Requ=DBte" pour "Requ=EAte".
Sous Idlle c'est OK.
J'ai essay=E9 les d=E9clarations # -*- coding:Latin-1 -*-, ou, Unicode,
m=EAme r=E9sultat.
Les options r=E9gionales de windows sont 'Francais'
L'affichage n'=E9tait pas correct dans une fen=EAtre dos, la page de code
utilis=E9 par windows =E9tait la 1512 par d=E9faut, le l'ai modifi=E9 en 85=
0=2E
L'affichage sous dos est correct mais toujours pas sous =E9diteur

Comme je dois traiter les fichiers pour les renommer selon certaines
r=E8gles, j'ai vraiment besoin de r=E9cup=E9rer les noms corrects?
Merci de votre aide

Philippe

9 réponses

Avatar
Encolpe Degoute
Bonjour à tous;
j'ai un soucis de minuscules accentuées sous mon éditeur.

Sous Windows; je liste des fichiers et les affiches dans la console
pour controle.
Sous Notepad++ les minuscules accentuées ne sont pas correctes, ex
RequÛte" pour "Requête".
Sous Idlle c'est OK.
J'ai essayé les déclarations # -*- coding:Latin-1 -*-, ou, Unicode,
même résultat.


Pour windows c'est souvent:
# -*- coding:cp1252 -*-

et plus rarement:

# -*- coding:utf-8 -*-

Les options régionales de windows sont 'Francais'
L'affichage n'était pas correct dans une fenêtre dos, la page de code
utilisé par windows était la 1512 par défaut, le l'ai modifié en 850.
L'affichage sous dos est correct mais toujours pas sous éditeur


Un bon éditeur détecte l'encodage dans les entêtes du fichier python...
L'autre problème est la détection de l'encodage par la fenêtre DOS...

Comme je dois traiter les fichiers pour les renommer selon certaines
règles, j'ai vraiment besoin de récupérer les noms corrects?


C'est windows, il vaut mieux travailler avec une interface graphique
pour récupérer des éléments non ascii.

Cordialement,
--
Encolpe DEGOUTE
http://encolpe.degoute.free.fr/
Logiciels libres, hockey sur glace et autres activités cérébrales

Avatar
NicolasP

Comme je dois traiter les fichiers pour les renommer selon certaines
règles, j'ai vraiment besoin de récupérer les noms corrects?
Les noms sont (surement) récupérés correctement. Il reste à les utiliser correctement.


Comment la procédure de renomage sera t-elle faite ?
Un programme avec une interface graphique ?
Un programme/batch/script qui utilise un fichier en entrée ?

Nicolas

Avatar
pil91
C'est windows, il vaut mieux travailler avec une interface graphique
pour récupérer des éléments non ascii.
Encolpe DEGOUTE


On 12 nov, 16:21, NicolasP wrote:
Les noms sont (surement) récupérés correctement. Il reste à les utiliser correctement.


Comment la procédure de renomage sera t-elle faite ?
Un programme avec une interface graphique ?
Un programme/batch/script qui utilise un fichier en entrée ?

Nicolas


Merci pour vos réponses.
C'est un prog batch qui va traiter les chemins des fichiers au fur et
à mesure avec os.renames
Quand je récupère la liste des répertoires et fichiers dans une sortie
fichier texte,
alors je peux le relire correctement dans le bloc notes.
Donc le pb vient bien de la sortie console que je vois sous notepad++.
Ce n'est pas bloquant, c'est le principal.

A propos les noms de fichiers avec leurs chemins que je récupére me
posent pb pour les traiter.
Python interprète les '' dans les chemins comme un caractère
d''échappement.
J'ai trouvé une solution de contournement en faisant précéder la
chaine d'un 'r' pour que python
la traite en données brutes, sans interprétation. Mais je me souviens
d'avoir lu qu'il était possible de
modifier le caractère d'échappement, évidement je ne retrouve plus
l'info :)

Cordialement
Philippe


Avatar
NicolasP
A propos les noms de fichiers avec leurs chemins que je récupére me
posent pb pour les traiter.
Python interprète les '' dans les chemins comme un caractère
d''échappement.



Tu les récupères comment les noms de fichier ?

Nicolas

Avatar
Laurent Pointal
C'est windows, il vaut mieux travailler avec une interface graphique
pour récupérer des éléments non ascii.
Encolpe DEGOUTE


On 12 nov, 16:21, NicolasP wrote:
Les noms sont (surement) récupérés correctement. Il reste à les utiliser correctement.
Comment la procédure de renomage sera t-elle faite ?

Un programme avec une interface graphique ?
Un programme/batch/script qui utilise un fichier en entrée ?

Nicolas


Merci pour vos réponses.
C'est un prog batch qui va traiter les chemins des fichiers au fur et
à mesure avec os.renames
Quand je récupère la liste des répertoires et fichiers dans une sortie
fichier texte,
alors je peux le relire correctement dans le bloc notes.
Donc le pb vient bien de la sortie console que je vois sous notepad++.
Ce n'est pas bloquant, c'est le principal.

A propos les noms de fichiers avec leurs chemins que je récupére me
posent pb pour les traiter.
Python interprète les '' dans les chemins comme un caractère
d''échappement.


Attention, uniquement pour les chaînes dans les sources, si tu récupères
une chaine en ligne de commande ou par un appel de fonction, les sont
"normaux" dans la chaîne.

J'ai trouvé une solution de contournement en faisant précéder la
chaine d'un 'r' pour que python
la traite en données brutes, sans interprétation.


Gaffe: pas d' final.

Mais je me souviens
d'avoir lu qu'il était possible de
modifier le caractère d'échappement, évidement je ne retrouve plus
l'info :)


Là, tu m'étonnes. Le caractère de séparation entre les parties d'un
chemin, éventuellent en touchant os.dirsep [mais c'est une très mauvaise
idée], mais le caractère d'échappement pour les chaînes...

Enfin, de mémoire, os.listdir() retourne des noms au format unicode si
le paramètre qui lui a été donné est au format unicode.



Cordialement
Philippe



A+

Laurent.



Avatar
pil91
Tu les récupères comment les noms de fichier ?

Nicolas


voici le code simplifié
============
# -*- coding:Latin-1 -*-

import glob
import os.path
import sys
import psycopg2

def listdirectory(path):
fichier=[]
l = glob.glob(path+'*')
for i in l:
if os.path.isdir(i): fichier.extend(listdirectory(i))
else: fichier.append(i)
return fichier

def quelid(table,activ,olid,fichier):
# La je construit le chemin de sortie à partir de renseignements
lus dans une base postgresql

lf = os.linesep
mesfic = listdirectory('D:Mes documentsMes progs Python
Dossiers_Limoges')

connString = psycopg2.connect("dbname=mosaic user=postgres
host5.233.46.4 password=xxx")
curs_mosaic = connString.cursor() # Base source

table = 'suiviegs'
activ = 'EGS/Estimation'

for fichier in(mesfic):
if table in fichier :
fichier = 'r' + fichier
chemintranches = fichier.split('')
oldid = chemintranches[7]
quelid(table,activ,oldid,chemintranches[3:])

print 'OK'
===============
C'est comme cela que j'arrive à traiter le chemin de mes fichiers:
'fichier = 'r' + fichier'
Sinon le split n'y arrive pas. Pour info je récupère aussi le 'r' dans
le premier fractionnement.
Je n'ai pas une grande expérience en Python aussi ce n'est peut être
pas la méthode la plus Pythonnesque

Bye

Avatar
Méta-MCI \(MVP\)
Bonsoir !

Les noms de fichiers, dans Windows (NT et +) suivent ces règles (en
France, au moins) :
- par défaut, codage en CP850
- s'il y a un caractère non CP850, utilisation d'Unicode, encodé en
UTF-16

Malheureusement, il n'y a pas de moyen de savoir, a priori, dans quel
cas on se trouve. pour certains traitements. Dans certains cas, on s'en
sort avec un try: mais ça ne suffit pas toujours.

Et aussi, il faut noter que cela influence la longueur maximale des
paths+noms de fichiers. En CP850, c'est 255 caractères ; mais, en
Unicode, passe à 32767 caractères. Problème : de très nombreux
logiciels ne suivent pas (logiciels de backup/sauvegarde, de synchro, de
compression, etc. etc.)

Enfin, il y a un autre problème, auquel je n'ai pas (encore) trouvé de
solution : un correspondant, utilisant le code-page 866, et a des
fichiers avec des noms en cyrillique, codés sur des octets. Il m'envoie
un fichier ; impossible de l'exploiter directement, soit par CP850, soit
par Unicode. Certes, avec Python, on peut décoder 866 et encoder en
UTF-16, mais, bon, ce n'est pas la joie...

@+

Michel Claveau
Avatar
NicolasP
mesfic = listdirectory('D:Mes documentsMes progs Python
Dossiers_Limoges')

Là, il faudrait des doubles ou une chaine raw (r'D:Mes doc...')


for fichier in(mesfic):
if table in fichier :
fichier = 'r' + fichier
Tu ne fais que rajouter un r devant la chaine. Rien à voir avec une chaine de type r'ma chaine'.

Ici, ça ne devrait rien changer car il n'y a pas de séquence d'échappement connue comme t, n ...

chemintranches = fichier.split('')
oldid = chemintranches[7]
quelid(table,activ,oldid,chemintranches[3:])

print 'OK'
============== > C'est comme cela que j'arrive à traiter le chemin de mes fichiers:
'fichier = 'r' + fichier'
Voir point précédent.


Sinon le split n'y arrive pas.
Ca n'a rien à voir. Rajouter un r davant la chaine ne peut rien changer au fonctionnement de split().



Pour info je récupère aussi le 'r' dans
le premier fractionnement.
Normal, tu n'a fais que modifier ta chaine en ajoutant un r devant.


Avatar
pil91
NicolasP
Là, il faudrait des doubles ou une chaine raw (r'D:Mes doc...')

Ici, ça ne devrait rien changer car il n'y a pas de séquence d'échap pement connue comme t, n ...



Merci NicolasP pour la pédagogie de ta réponse
Effectivement , j'avais la tête dure.
Le code corrigé comme suit marche nickel
======
mesfic = listdirectory(r'D:Temptest')

for fichier in(mesfic):
chemintranches = fichier.split('')
print chemintranches
for i in range(len(chemintranches)):
print chemintranches[i]
=========
En plus j'avais choisi 'test' comme nom de répertoire pour mes essais,
sans le 'r' pour raw, le prog s'exécutait correctement mais sans rien
faire :) !
Bon je pars 10 jours en congé, merci à tous.