begin process at 2012 05 25 06:55:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Python

 > 

Divers

 > 

Débutant(e)

 > 

Souci d'encodage : remplacer un mot français accentué


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Souci d'encodage : remplacer un mot français accentué

lundi 17 août 2009 à 15:22:44 | Souci d'encodage : remplacer un mot français accentué

thulin

Bonjour,
J'utilise un script python pour remplacer un mot par un autre dans un texte (avec bash). Il fonctionne bien avec des mots anglais, mais pas avec des mots français accentués...

Voici le script :

Code Python :
#!/usr/bin/env python

# -*- coding: utf-8 -*-
import sys
import re
from_str,to_str=sys.argv[1:3]
contents=sys.stdin.read()
pat_str=r'(?<!-)\b%s\b(?=[^-]|\Z)'%(from_str)
pat=re.compile(pat_str,re.IGNORECASE)
result=pat.sub(to_str,contents)
print(result)


Ensuite avec bash, les exemples (tordus mais prévoyants) suivants donnent :

$ echo "green-this this this this-green" | erg-replace.py "this" "yellow"
green-this yellow yellow this-green

En anglais le mot non composé "this" est donc correctement remplacé.

$ echo rouge-ça ça ça ça-vert | erg-replace.py ça jaune
rouge-ça ça ça ça-vert

En français, le caractère "ç" ne passe pas...

Merci de l'aide,
Thibaud.

mardi 18 août 2009 à 10:51:53 | Re : Souci d'encodage : remplacer un mot français accentué

thulin

Réponse acceptée !

OK, la solution, c'est d'utiliser python 3...

mardi 18 août 2009 à 10:52:46 | Re : Souci d'encodage : remplacer un mot français accentué

thulin

Cf. aussi cette discussion (en) : http://ubuntuforums.org/showpost.php?p=7791724&postcount=19 pour le même script en perl

mercredi 19 août 2009 à 14:49:22 | Re : Souci d'encodage : remplacer un mot français accentué

Dobel

Réponse acceptée !

C'est quand même faisable avec du python <= 2.6 malgré son charset par défaut

Code Python :
#!/usr/bin/python2.6

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

import sys
import re
import locale

from_str, to_str = sys.argv[1:3]

# get encoding from the current locale
loc = locale.getdefaultlocale()
if loc[1]:
encoding = loc[1]
else:
encoding = "utf-8"

contents = sys.stdin.read().decode(encoding)
to_str = to_str.decode(encoding)
from_str = from_str.decode(encoding)
pattern = r"(?<!-)\b%s\b(?=[^-]|\Z)" % from_str

regexp = re.compile(pattern, re.IGNORECASE | re.UNICODE)

print regexp.sub(to_str, contents)


$ echo -n "rouge-ça ça ça ça-vert" | ./toto.py ça jaune
rouge-ça jaune jaune ça-vert
$ echo -n "ß ß-" | ./toto.py ß Æ
Æ ß-
$



Cette discussion est classée dans : mot, str, green, français, pat


Répondre à ce message

Sujets en rapport avec ce message

Condition ne fonctionne pas [ par Fabrizio001 ] Bonjour,Je débute (1 semaine )en python et je sollicite votre aide. Voici ce que j'essaye de faire:Je veux contrôler le contenu d'un fichier .txt qui Récupérer argument d'une dll [ par liliputien2002 ] Bonjour,Je suis en train de développer une application python qui utilise une dll propriétaire. (a la base c'est du code C)Cette dll me permet d'inter Remplacer un mot ou un nombre dans un fichier [ par tptpt ] Bonjour,Es-ce possible de remplacer un mot ou un nombre dans un fichier grace à python? voir si un caractère a déjà était écrit dans une boucle [ par Lutcho74 ] Bonjour,Ma question est un peu dans le titre du sujet...Je compte faire un programme qui donne un nombre aléatoire grâce au module random pour ensuite default.cfg [ par fsol21 ] Bonjour, Je suis en train de traduire en français un tutoriel Python écrit par des Allemands. Et je ne connais pas grand chose au Python. Il est quest Recherche de mots dans un fichier [ par Malrod ] Bonjour. Je débute en python et j'aimerais me faire un "moteur de recherche" pour fouiller dans des fichiers. J'aimerais ici demander la recherche enregistrer des valeur dans un fichier [ par fabespa34 ] Bonjour, pour m'amuser j'ai fais un générateur de mot de passe et au moment d'enregistrer le mot de passe et l'identifiant associé ça coince. Voilà le Python 2.7 / Tkinter : Affichage simultané [ par mfassifi ] Bonjour, Je débute avec python et j'essaie de faire un Scrabble. Voici mon problème : j'essaie d'afficher les points équivalents à un mot en même temp


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales