Re: [CBLX] Comment lire autour du énième caractère dans un fichier

2020-04-14 Par sujet Philippe Delavalade
Bonjour.

Si le problème vient du codage des caractères (ce qui est une excellente
piste), et si Christophe est propriétaire du fichier, il peut recoder
complètement le fichier avec recode ou autre.

Effectivement la commande "file" devrait donner les renseignements sur
l'encodage. 

-- 
Philippe

Le mardi 14 avril à 14:45, Jean-François home a écrit :
> Bonjour Christophe et tous,
> 
> Désolé Christophe pour le doublon, il est sans doute préférable que j'écrive
> ici au cas où je raconte de grosses bêtises. :)
> 
> 
> Réponse rapide, que l'on pourra amender, en particulier si j'emploie une
> terminologie que d'aucuns trouveront peut-être approximative.
> 
> Par rapport à ce que tu indiques, il semblerait qu'il suffirait de forcer
> l'encoedage à l'ouverture du fichier. Ton programme marche bien avec une
> version 2, il est très vraisemblable que ton fichier soit encodé en texte
> ANSI / Windows-1252 / CP1252 / Latin1, au choix de la dénomination. Ce genre
> de fichier où un caractère n'occupe qu'un seul octet dans tous les cas.
> 
> En Python 3, lorsque tu ouvres unfichier, il est par défaut considéré comme
> de l'UTF-8. Où certains caractères , dont le code est supérieur à 127,
> peuvent occuper 2, et jusqu'à 4 octets, si ce n'est 6.
> 
> Et donc, sur des caractères genre accents, ça coince...
> 
> Quelque chose du genre:
> f = open("ton fichier", "r", encoding="iso-8859-1") pourrait suffire à faire
> l'affaire.
> 
> Pour le nom exact de l'encodage, il faudrait retrouver le coin d'aide qui y
> fait référence, peut-être en partant de l'aide sur l'objet file...
> 
> J.-F.
> 
> 
> Le 14/04/2020 à 12:15, Delaunay Christophe a écrit :
> > Bonjour tous,
> > 
> > Voilà, j’ai un programme en Python qui doit parcourir un fichier censé
> > être un fichier texte mais qui a l’air de contenir des caractères
> > embêtants.
> > 
> > Enfin, en Python 2.7.16, ça s’ouvre bien mais pas en Python 3.7.3. Je
> > vais sûrement trouver mais en attendant, je reçois cette erreur :
> > 
> > 'utf-8' codec can't decode byte 0xc9 in position 1675: invalid
> > continuation byte
> > 
> > Ma question est la suivante:
> > 
> > Y a-t-il une commande simple pour lire la ligne qui contient le énième
> > caractère d’un fichier, ici par exemple le 1675^ème caractère ? Ou alors
> > va-t-il falloir que je me fasse un bout de code juste pour ça ?
> > 
> > Ou alors, les spécialistes de Python savent-ils pourquoi mon programme
> > tourne nickel en Python 2 et pas en Python 3 ?
> > 
> > Merci infiniment. Bonne journée. @+ ChD
> > 
> 
> -- 
>   CBLX - CarrefourBLinuX MailingListe   Pour obtenir de l'aide, envoyez le
> sujet  help  à:   carrefourblinux-requ...@lists.tuxfamily.org
>   Archives:
> http://listengine.tuxfamily.org/lists.tuxfamily.org/carrefourblinux
>   ou   http://www.mail-archive.com/carrefourblinux@lists.tuxfamily.org/
> 

-- 
   CBLX - CarrefourBLinuX MailingListe 
   Pour obtenir de l'aide, envoyez le sujet  help  à: 
   carrefourblinux-requ...@lists.tuxfamily.org
   Archives: 
   http://listengine.tuxfamily.org/lists.tuxfamily.org/carrefourblinux
   ou 
   http://www.mail-archive.com/carrefourblinux@lists.tuxfamily.org/



Re: [CBLX] Comment lire autour du énième caractère dans un fichier

2020-04-14 Par sujet Jean-François home

Bonjour Christophe et tous,

Désolé Christophe pour le doublon, il est sans doute préférable que 
j'écrive ici au cas où je raconte de grosses bêtises. :)



Réponse rapide, que l'on pourra amender, en particulier si j'emploie une 
terminologie que d'aucuns trouveront peut-être approximative.


Par rapport à ce que tu indiques, il semblerait qu'il suffirait de 
forcer l'encoedage à l'ouverture du fichier. Ton programme marche bien 
avec une version 2, il est très vraisemblable que ton fichier soit 
encodé en texte ANSI / Windows-1252 / CP1252 / Latin1, au choix de la 
dénomination. Ce genre de fichier où un caractère n'occupe qu'un seul 
octet dans tous les cas.


En Python 3, lorsque tu ouvres unfichier, il est par défaut considéré 
comme de l'UTF-8. Où certains caractères , dont le code est supérieur à 
127, peuvent occuper 2, et jusqu'à 4 octets, si ce n'est 6.


Et donc, sur des caractères genre accents, ça coince...

Quelque chose du genre:
f = open("ton fichier", "r", encoding="iso-8859-1") pourrait suffire à 
faire l'affaire.


Pour le nom exact de l'encodage, il faudrait retrouver le coin d'aide 
qui y fait référence, peut-être en partant de l'aide sur l'objet file...


J.-F.


Le 14/04/2020 à 12:15, Delaunay Christophe a écrit :

Bonjour tous,

Voilà, j’ai un programme en Python qui doit parcourir un fichier censé 
être un fichier texte mais qui a l’air de contenir des caractères embêtants.


Enfin, en Python 2.7.16, ça s’ouvre bien mais pas en Python 3.7.3. Je 
vais sûrement trouver mais en attendant, je reçois cette erreur :


'utf-8' codec can't decode byte 0xc9 in position 1675: invalid 
continuation byte


Ma question est la suivante:

Y a-t-il une commande simple pour lire la ligne qui contient le énième 
caractère d’un fichier, ici par exemple le 1675^ème caractère ? Ou alors 
va-t-il falloir que je me fasse un bout de code juste pour ça ?


Ou alors, les spécialistes de Python savent-ils pourquoi mon programme 
tourne nickel en Python 2 et pas en Python 3 ?


Merci infiniment. Bonne journée. @+ ChD



--
  CBLX - CarrefourBLinuX MailingListe 
  Pour obtenir de l'aide, envoyez le sujet  help  à: 
  carrefourblinux-requ...@lists.tuxfamily.org
  Archives: 
  http://listengine.tuxfamily.org/lists.tuxfamily.org/carrefourblinux
  ou 
  http://www.mail-archive.com/carrefourblinux@lists.tuxfamily.org/




Re: [CBLX] Comment lire autour du énième caractère dans un fichier

2020-04-14 Par sujet Philippe Delavalade
Bonjour Christophe.

Je ne sais pas faire ce que tu demandes ; néanmoins, le caractère 0xc9
semble être le E aigu majuscule.

Comme c'est un caractère peu fréquent, tu peux peut-être faire afficher les
lignes contenant ce caractère avec :

sed -n '/É/p' fichier

sed peut peut-être prendre un caractère hexadécimal au lieu du 'É' mais je
ne sais pas faire. Mais essais empiriques me donnent des erreurs...

Bonne recherche.

-- 
Philippe

Le mardi 14 avril à 12:15, Delaunay Christophe a écrit :
> Bonjour tous,
> 
> Voilà, j'ai un programme en Python qui doit parcourir un fichier censé être 
> un fichier texte mais qui a l'air de contenir des caractères embêtants.
> 
> Enfin, en Python 2.7.16, ça s'ouvre bien mais pas en Python 3.7.3. Je vais 
> sûrement trouver mais en attendant, je reçois cette erreur :
> 
> 'utf-8' codec can't decode byte 0xc9 in position 1675: invalid continuation 
> byte
> 
> Ma question est la suivante:
> 
> Y a-t-il une commande simple pour lire la ligne qui contient le énième 
> caractère d'un fichier, ici par exemple le 1675ème caractère ? Ou alors 
> va-t-il falloir que je me fasse un bout de code juste pour ça ?
> 
> Ou alors, les spécialistes de Python savent-ils pourquoi mon programme tourne 
> nickel en Python 2 et pas en Python 3 ?
> 
> Merci infiniment. Bonne journée. @+ ChD

-- 
   CBLX - CarrefourBLinuX MailingListe 
   Pour obtenir de l'aide, envoyez le sujet  help  à: 
   carrefourblinux-requ...@lists.tuxfamily.org
   Archives: 
   http://listengine.tuxfamily.org/lists.tuxfamily.org/carrefourblinux
   ou 
   http://www.mail-archive.com/carrefourblinux@lists.tuxfamily.org/



Re: [CBLX] Comment lire autour du énième caractère dans un fichier

2020-04-14 Par sujet Didier Spaier
Salut Christophe

Le 14/04/2020 à 12:15, Delaunay Christophe a écrit :
> Ou alors, les spécialistes de Python savent-ils pourquoi mon programme tourne 
> nickel en Python 2 et pas en Python 3 ?

Il faudrait que tu postes au moins le bout de code qui lit cette ligne pour le 
savoir.

Bonne journée,
Didier

-- 
   CBLX - CarrefourBLinuX MailingListe 
   Pour obtenir de l'aide, envoyez le sujet  help  à: 
   carrefourblinux-requ...@lists.tuxfamily.org
   Archives: 
   http://listengine.tuxfamily.org/lists.tuxfamily.org/carrefourblinux
   ou 
   http://www.mail-archive.com/carrefourblinux@lists.tuxfamily.org/



[CBLX] Comment lire autour du énième caractère dans un fichier

2020-04-14 Par sujet Delaunay Christophe
Bonjour tous,

Voilà, j'ai un programme en Python qui doit parcourir un fichier censé être un 
fichier texte mais qui a l'air de contenir des caractères embêtants.

Enfin, en Python 2.7.16, ça s'ouvre bien mais pas en Python 3.7.3. Je vais 
sûrement trouver mais en attendant, je reçois cette erreur :

'utf-8' codec can't decode byte 0xc9 in position 1675: invalid continuation byte

Ma question est la suivante:

Y a-t-il une commande simple pour lire la ligne qui contient le énième 
caractère d'un fichier, ici par exemple le 1675ème caractère ? Ou alors va-t-il 
falloir que je me fasse un bout de code juste pour ça ?

Ou alors, les spécialistes de Python savent-ils pourquoi mon programme tourne 
nickel en Python 2 et pas en Python 3 ?

Merci infiniment. Bonne journée. @+ ChD