Couper une chaîne au bout de 72 caractères, sans couper les mots
7 réponses
Denis Bitouzé
Bonsoir,
je souhaite envoyer des mails via un script python (dans un site
Plone) en respectant la r=E8gle pr=E9conisant de ne pas d=E9passer 72
caract=E8res par ligne, tout en ne coupant pas les mots.
Le probl=E8me est que le contenu du message n'est pas forc=E9ment
pr=E9visible (certaines phrases contiennent des valeurs de variables)
donc je ne peux pas le pr=E9-formater.
Vu que je suis assez press=E9 et pas expert en python, loin de l=E0, je
m'en remets =E0 vous pour trouver une fa=E7on simple de faire cela.
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
Pierre Maurette
Denis Bitouzé, le 15/06/2009 a écrit :
Bonsoir,
je souhaite envoyer des mails via un script python (dans un site Plone) en respectant la règle préconisant de ne pas dépasser 72 caractères par ligne, tout en ne coupant pas les mots.
Le problème est que le contenu du message n'est pas forcément prévisible (certaines phrases contiennent des valeurs de variables) donc je ne peux pas le pré-formater.
Vu que je suis assez pressé et pas expert en python, loin de là, je m'en remets à vous pour trouver une façon simple de faire cela.
Confronté au même problème, et vu que j'étais prassé et pas expert en python, j'ai fait: python word wrap dans Google, et la première réponse m'a permis de copier - coller - modifier un truc qui semble fonctionnel: <URL:http://code.activestate.com/recipes/148061/>
La fonction:
def wrap(text, width): """ A word-wrap function that preserves existing line breaks and most spaces in the text. Expects that existing line breaks are posix newlines (n). """ return reduce(lambda line, word, width=width: '%s%s%s' % (line, ' n'[(len(line)-line.rfind('n')-1 + len(word.split('n',1)[0] ) >= width)], word), text.split(' ') )
-- Pierre Maurette
Denis Bitouzé, le 15/06/2009 a écrit :
Bonsoir,
je souhaite envoyer des mails via un script python (dans un site
Plone) en respectant la règle préconisant de ne pas dépasser 72
caractères par ligne, tout en ne coupant pas les mots.
Le problème est que le contenu du message n'est pas forcément
prévisible (certaines phrases contiennent des valeurs de variables)
donc je ne peux pas le pré-formater.
Vu que je suis assez pressé et pas expert en python, loin de là, je
m'en remets à vous pour trouver une façon simple de faire cela.
Confronté au même problème, et vu que j'étais prassé et pas expert en
python, j'ai fait:
python word wrap
dans Google, et la première réponse m'a permis de copier - coller -
modifier un truc qui semble fonctionnel:
<URL:http://code.activestate.com/recipes/148061/>
La fonction:
def wrap(text, width):
"""
A word-wrap function that preserves existing line breaks
and most spaces in the text. Expects that existing line
breaks are posix newlines (n).
"""
return reduce(lambda line, word, width=width: '%s%s%s' %
(line,
' n'[(len(line)-line.rfind('n')-1
+ len(word.split('n',1)[0]
) >= width)],
word),
text.split(' ')
)
je souhaite envoyer des mails via un script python (dans un site Plone) en respectant la règle préconisant de ne pas dépasser 72 caractères par ligne, tout en ne coupant pas les mots.
Le problème est que le contenu du message n'est pas forcément prévisible (certaines phrases contiennent des valeurs de variables) donc je ne peux pas le pré-formater.
Vu que je suis assez pressé et pas expert en python, loin de là, je m'en remets à vous pour trouver une façon simple de faire cela.
Confronté au même problème, et vu que j'étais prassé et pas expert en python, j'ai fait: python word wrap dans Google, et la première réponse m'a permis de copier - coller - modifier un truc qui semble fonctionnel: <URL:http://code.activestate.com/recipes/148061/>
La fonction:
def wrap(text, width): """ A word-wrap function that preserves existing line breaks and most spaces in the text. Expects that existing line breaks are posix newlines (n). """ return reduce(lambda line, word, width=width: '%s%s%s' % (line, ' n'[(len(line)-line.rfind('n')-1 + len(word.split('n',1)[0] ) >= width)], word), text.split(' ') )
-- Pierre Maurette
Denis Bitouzé
Le mardi 16/06/09 à 11h33, Pierre Maurette a écrit :
python word wrap
Ah, ce que j'ignorais, c'est que « Couper une chaîne au bout de 72 caractères, sans couper les mots » se traduisait en anglais par « word wrap ». Quel sens du raccourci, ces anglophones ! ;)
Merci ! -- Denis
Le mardi 16/06/09 à 11h33,
Pierre Maurette <maurettepierre@wanadoo.fr> a écrit :
python word wrap
Ah, ce que j'ignorais, c'est que « Couper une chaîne au bout de 72
caractères, sans couper les mots » se traduisait en anglais par « word
wrap ». Quel sens du raccourci, ces anglophones ! ;)
Le mardi 16/06/09 à 11h33, Pierre Maurette a écrit :
python word wrap
Ah, ce que j'ignorais, c'est que « Couper une chaîne au bout de 72 caractères, sans couper les mots » se traduisait en anglais par « word wrap ». Quel sens du raccourci, ces anglophones ! ;)
Merci ! -- Denis
pdorange
Denis Bitouzé wrote:
> python word wrap
Ah, ce que j'ignorais, c'est que « Couper une chaîne au bout de 72 caractères, sans couper les mots » se traduisait en anglais par « word wrap ». Quel sens du raccourci, ces anglophones ! ;)
Word Wrap, c'est "retour à la ligne automatique", ou "couper sur les mots" en français. Ce qui n'est guère plus long, mais l'anglais est un langue très forte pour métamorphoser des concepts en une petite suite de mots, c'est un des forces de cette langue.
Ah, ce que j'ignorais, c'est que « Couper une chaîne au bout de 72
caractères, sans couper les mots » se traduisait en anglais par « word
wrap ». Quel sens du raccourci, ces anglophones ! ;)
Word Wrap, c'est "retour à la ligne automatique", ou "couper sur les
mots" en français.
Ce qui n'est guère plus long, mais l'anglais est un langue très forte
pour métamorphoser des concepts en une petite suite de mots, c'est un
des forces de cette langue.
Ah, ce que j'ignorais, c'est que « Couper une chaîne au bout de 72 caractères, sans couper les mots » se traduisait en anglais par « word wrap ». Quel sens du raccourci, ces anglophones ! ;)
Word Wrap, c'est "retour à la ligne automatique", ou "couper sur les mots" en français. Ce qui n'est guère plus long, mais l'anglais est un langue très forte pour métamorphoser des concepts en une petite suite de mots, c'est un des forces de cette langue.
Ce message est sous licence Creative Commons "by-nc-sa-2.0" <http://creativecommons.org/licenses/by-nc-sa/2.0/fr/>
Pierre Quentel
On 15 juin, 20:26, Denis Bitouzé wrote:
Bonsoir,
je souhaite envoyer des mails via un script python (dans un site Plone) en respectant la règle préconisant de ne pas dépasser 72 caractères par ligne, tout en ne coupant pas les mots.
Le problème est que le contenu du message n'est pas forcément prévisible (certaines phrases contiennent des valeurs de variables) donc je ne peux pas le pré-formater.
Vu que je suis assez pressé et pas expert en python, loin de là, je m'en remets à vous pour trouver une façon simple de faire cela.
Merci d'avance. -- Denis
Bonjour,
La bibliothèque standard de Python contient un module textwrap qui fait exactement ce que tu recherches :
renvoie les lignes correspondant au texte découpé en chaînes de caractères d'au plus longueur_max
Quelqu'un le mentionne d'ailleurs dans les commentaires de la recette sur ActiveState citée par Pierre
Dans pas mal de cas, pour trouver si la bibliothèque standard réalise une fonction donnée, le plus simple est de parcourir la table des matières ; ici tu l'aurais trouvée, sans surprise, dans la rubrique "String Services"
- Pierre
On 15 juin, 20:26, Denis Bitouzé <dbitouze...@spam.wanadoo.fr> wrote:
Bonsoir,
je souhaite envoyer des mails via un script python (dans un site
Plone) en respectant la règle préconisant de ne pas dépasser 72
caractères par ligne, tout en ne coupant pas les mots.
Le problème est que le contenu du message n'est pas forcément
prévisible (certaines phrases contiennent des valeurs de variables)
donc je ne peux pas le pré-formater.
Vu que je suis assez pressé et pas expert en python, loin de là, je
m'en remets à vous pour trouver une façon simple de faire cela.
Merci d'avance.
--
Denis
Bonjour,
La bibliothèque standard de Python contient un module textwrap qui
fait exactement ce que tu recherches :
renvoie les lignes correspondant au texte découpé en chaînes de
caractères d'au plus longueur_max
Quelqu'un le mentionne d'ailleurs dans les commentaires de la recette
sur ActiveState citée par Pierre
Dans pas mal de cas, pour trouver si la bibliothèque standard réalise
une fonction donnée, le plus simple est de parcourir la table des
matières ; ici tu l'aurais trouvée, sans surprise, dans la rubrique
"String Services"
je souhaite envoyer des mails via un script python (dans un site Plone) en respectant la règle préconisant de ne pas dépasser 72 caractères par ligne, tout en ne coupant pas les mots.
Le problème est que le contenu du message n'est pas forcément prévisible (certaines phrases contiennent des valeurs de variables) donc je ne peux pas le pré-formater.
Vu que je suis assez pressé et pas expert en python, loin de là, je m'en remets à vous pour trouver une façon simple de faire cela.
Merci d'avance. -- Denis
Bonjour,
La bibliothèque standard de Python contient un module textwrap qui fait exactement ce que tu recherches :
renvoie les lignes correspondant au texte découpé en chaînes de caractères d'au plus longueur_max
Quelqu'un le mentionne d'ailleurs dans les commentaires de la recette sur ActiveState citée par Pierre
Dans pas mal de cas, pour trouver si la bibliothèque standard réalise une fonction donnée, le plus simple est de parcourir la table des matières ; ici tu l'aurais trouvée, sans surprise, dans la rubrique "String Services"
- Pierre
Sysadmin
Pierre Quentel a écrit :
On 15 juin, 20:26, Denis Bitouzé wrote:
Bonsoir,
je souhaite envoyer des mails via un script python (dans un site Plone) en respectant la règle préconisant de ne pas dépasser 72 caractères par ligne, tout en ne coupant pas les mots.
Le problème est que le contenu du message n'est pas forcément prévisible (certaines phrases contiennent des valeurs de variables) donc je ne peux pas le pré-formater.
Vu que je suis assez pressé et pas expert en python, loin de là, j e m'en remets à vous pour trouver une façon simple de faire cela.
Merci d'avance. -- Denis
Bonjour,
La bibliothèque standard de Python contient un module textwrap qui fait exactement ce que tu recherches :
renvoie les lignes correspondant au texte découpé en chaînes de caractères d'au plus longueur_max
Quelqu'un le mentionne d'ailleurs dans les commentaires de la recette sur ActiveState citée par Pierre
Dans pas mal de cas, pour trouver si la bibliothèque standard réali se une fonction donnée, le plus simple est de parcourir la table des matières ; ici tu l'aurais trouvée, sans surprise, dans la rubrique "String Services"
- Pierre
Batteries included comme disent les anglo-saxons.
Pierre Quentel a écrit :
On 15 juin, 20:26, Denis Bitouzé <dbitouze...@spam.wanadoo.fr> wrote:
Bonsoir,
je souhaite envoyer des mails via un script python (dans un site
Plone) en respectant la règle préconisant de ne pas dépasser 72
caractères par ligne, tout en ne coupant pas les mots.
Le problème est que le contenu du message n'est pas forcément
prévisible (certaines phrases contiennent des valeurs de variables)
donc je ne peux pas le pré-formater.
Vu que je suis assez pressé et pas expert en python, loin de là, j e
m'en remets à vous pour trouver une façon simple de faire cela.
Merci d'avance.
--
Denis
Bonjour,
La bibliothèque standard de Python contient un module textwrap qui
fait exactement ce que tu recherches :
renvoie les lignes correspondant au texte découpé en chaînes de
caractères d'au plus longueur_max
Quelqu'un le mentionne d'ailleurs dans les commentaires de la recette
sur ActiveState citée par Pierre
Dans pas mal de cas, pour trouver si la bibliothèque standard réali se
une fonction donnée, le plus simple est de parcourir la table des
matières ; ici tu l'aurais trouvée, sans surprise, dans la rubrique
"String Services"
je souhaite envoyer des mails via un script python (dans un site Plone) en respectant la règle préconisant de ne pas dépasser 72 caractères par ligne, tout en ne coupant pas les mots.
Le problème est que le contenu du message n'est pas forcément prévisible (certaines phrases contiennent des valeurs de variables) donc je ne peux pas le pré-formater.
Vu que je suis assez pressé et pas expert en python, loin de là, j e m'en remets à vous pour trouver une façon simple de faire cela.
Merci d'avance. -- Denis
Bonjour,
La bibliothèque standard de Python contient un module textwrap qui fait exactement ce que tu recherches :
renvoie les lignes correspondant au texte découpé en chaînes de caractères d'au plus longueur_max
Quelqu'un le mentionne d'ailleurs dans les commentaires de la recette sur ActiveState citée par Pierre
Dans pas mal de cas, pour trouver si la bibliothèque standard réali se une fonction donnée, le plus simple est de parcourir la table des matières ; ici tu l'aurais trouvée, sans surprise, dans la rubrique "String Services"
- Pierre
Batteries included comme disent les anglo-saxons.
candide
Pierre Maurette a écrit :
return reduce(lambda line, word, width=width: '%s%s%s' %
À noter quand même que reduce() est voué à la disparition, cf. http://www.python.org/dev/peps/pep-3100/
Pierre Maurette a écrit :
return reduce(lambda line, word, width=width: '%s%s%s' %
À noter quand même que reduce() est voué à la disparition, cf.
http://www.python.org/dev/peps/pep-3100/
return reduce(lambda line, word, width=width: '%s%s%s' %
À noter quand même que reduce() est voué à la disparition, cf. http://www.python.org/dev/peps/pep-3100/
Pierre Maurette
candide, le 21/06/2009 a écrit :
Pierre Maurette a écrit :
return reduce(lambda line, word, width=width: '%s%s%s' %
À noter quand même que reduce() est voué à la disparition, cf. http://www.python.org/dev/peps/pep-3100/
Peut-être, encore que pas mal de code doit trimbaler du reduce(), mais peu importe. J'ai simplement répondu une connerie, parce que la question restait sans réponse et que j'avais ça dans mes cartons(*). Mais en Python, quand textwrap existe dans le paquetage de base, faire autre chose est simplement une erreur. J'ai d'ailleurs corrigé mes archives à la lecture de la contribution de Pierre Quentel.
(*) Pire, au moment où j'avais pompé ce truc, je ne comprenais pas comment ça marchait...
-- Pierre Maurette
candide, le 21/06/2009 a écrit :
Pierre Maurette a écrit :
return reduce(lambda line, word, width=width: '%s%s%s' %
À noter quand même que reduce() est voué à la disparition, cf.
http://www.python.org/dev/peps/pep-3100/
Peut-être, encore que pas mal de code doit trimbaler du reduce(), mais
peu importe. J'ai simplement répondu une connerie, parce que la
question restait sans réponse et que j'avais ça dans mes cartons(*).
Mais en Python, quand textwrap existe dans le paquetage de base, faire
autre chose est simplement une erreur. J'ai d'ailleurs corrigé mes
archives à la lecture de la contribution de Pierre Quentel.
(*) Pire, au moment où j'avais pompé ce truc, je ne comprenais pas
comment ça marchait...
return reduce(lambda line, word, width=width: '%s%s%s' %
À noter quand même que reduce() est voué à la disparition, cf. http://www.python.org/dev/peps/pep-3100/
Peut-être, encore que pas mal de code doit trimbaler du reduce(), mais peu importe. J'ai simplement répondu une connerie, parce que la question restait sans réponse et que j'avais ça dans mes cartons(*). Mais en Python, quand textwrap existe dans le paquetage de base, faire autre chose est simplement une erreur. J'ai d'ailleurs corrigé mes archives à la lecture de la contribution de Pierre Quentel.
(*) Pire, au moment où j'avais pompé ce truc, je ne comprenais pas comment ça marchait...