Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/10/2016, à 18:16

JujuLand

[Résolu] Comment spécifier un caractère étendu ?

Bonjour, j'ai un caractère 0x0092 (apostrophe dans un mail encodé en ISO-8859-1) à remplacer dans une chaîne.

J'ai bien essayé le sub, mais :

re.sub("<chr 0x0092>,"'",para)

ne fait rien ...

J'ai remplacé ici le caractère par <chr 0x0092>, car le copier/coller ici le supprime ...

Je suppose qu'il doit y avoir moyen, mais je ne vois pas lequel.

Autre chose que j'aurai voulu, c'est une fonction identique à un left(chaine).
Cà existe ? j'ai pas trouvé ...

Merci
A+

Dernière modification par JujuLand (Le 11/10/2016, à 10:26)


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#2 Le 10/10/2016, à 23:00

JujuLand

Re : [Résolu] Comment spécifier un caractère étendu ?

Bon, j'ai fini par trouver ce qu'il me fallait, même si ce n'est pas l'équivalent d'un left, car le splicing ne  pouvait pas être utilisé.
Dans mon cas, il aurait fallu quelque chose su style :

left(chaine,rat(car,chaine)-1)

La chaine étant du style : 1459319802.E45780.2157 et il me fallait récupérer 1459319802.E45780
bonne solution a été d'utiliser :

			att=em_boundary.partition('.')
			att_boundary=att[0]+"."+att[1]

Je cherche encore pour le sub, et là, je sèche ...

A+


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#3 Le 11/10/2016, à 08:24

pingouinux

Re : [Résolu] Comment spécifier un caractère étendu ?

Bonjour,
Je suppose que c'est du python.

Pour la première question, il faudrait que tu montres un bout du fichier d'origine :

sed -n '/mot_de_la_ligne_contenant_le_caractere_bizarre/p' fichier_d_origine | hd

Pour la seconde :

>>> s='1459319802.E45780.2157'; car='.'
>>> car.join(s.split(car)[:-1])
'1459319802.E45780'

Hors ligne

#4 Le 11/10/2016, à 08:58

JujuLand

Re : [Résolu] Comment spécifier un caractère étendu ?

ok pour la ligne utilisant split et join.
Je n'arrivais pas à comprendre sur les exemples que j'avais trouvés qu'il fallait faire passer le séparateur par une variable, et j'avais toujours une erreur d'exécution. Les exemples ne me semblaient pas clairs.

Je ne connaissais pas hd, j'utilisais ghex

La ligne et son passage par hd :

J'envoie quelques articles en fait qui datent des vacances de NOËL et j'

alain@Gramps-JujuLand:~/Bureau/Archives_GADEL/split$ sed -n '/NOËL/p' Reveillac | hd
00000000  4a c2 92 65 6e 76 6f 69  65 20 71 75 65 6c 71 75  |J..envoie quelqu|
00000010  65 73 20 61 72 74 69 63  6c 65 73 20 65 6e 20 66  |es articles en f|
00000020  61 69 74 20 71 75 69 20  64 61 74 65 6e 74 20 64  |ait qui datent d|
00000030  65 73 20 76 61 63 61 6e  63 65 73 20 64 65 20 4e  |es vacances de N|
00000040  4f c3 8b 4c 20 65 74 20  6a c2 92 0a              |O..L et j...|
0000004c

Et je m'aperçois que je m'étais trompé lors des posts précédents, il s'agit donc du caractère c292, (probablement 92c2)

Malgré mon erreur, çà ne me donne toujours pas la solution ...

A+

Dernière modification par JujuLand (Le 11/10/2016, à 09:02)


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#5 Le 11/10/2016, à 09:43

pingouinux

Re : [Résolu] Comment spécifier un caractère étendu ?

Je n'arrivais pas à comprendre sur les exemples que j'avais trouvés qu'il fallait faire passer le séparateur par une variable, et j'avais toujours une erreur d'exécution.

Ce n'est pas nécessaire :

>>> s='1459319802.E45780.2157'
>>> '.'.join(s.split('.')[:-1])
'1459319802.E45780'

Pour convertir le fichier, en python3 :

import re, sys
nom_fic=sys.argv[1]
with open(nom_fic,'r') as f, open(nom_fic+'.modif','w') as g:
   fic=f.read()
   g.write(re.sub("\x92","'",fic))

à appeler ainsi

python3 le_script fichier_a_convertir

Il va générer le fichier fichier_a_convertir.modif

Ajouté : Le script suivant fonctionne en python2 et python3

import re, sys
nom_fic=sys.argv[1]
with open(nom_fic,'rb') as f, open(nom_fic+'.modif','wb') as g:
   fic=f.read()
   g.write(re.sub(b"\xc2\x92",b"'",fic))

Dernière modification par pingouinux (Le 11/10/2016, à 10:20)

Hors ligne

#6 Le 11/10/2016, à 10:25

JujuLand

Re : [Résolu] Comment spécifier un caractère étendu ?

Bon, la solution était légèrement différente de ta proposition, à savoir qu'il fallait remplacer les deux octets:

	para=re.sub("\xc2\x92","'",para)

Comme je travaille sur des fichiers mbox, et que je préfère ne pas y toucher, je m'abstiendrai de convertir le fichier complet, et je ne ferai la modification que sur le futur fichier pdf généré.

Merci
A+


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne