305 votes

Python tronquer une longue chaîne de caractères

Comment tronquer une chaîne de caractères à 75 caractères en Python ?

C'est ainsi que cela se passe en JavaScript :

var data="saddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddsaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddsadddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
var info = (data.length > 75) ? data.substring[0,75] + '..' : data;

518voto

Marcelo Cantos Points 91211
info = (data[:75] + '..') if len(data) > 75 else data

73 votes

Je changerais peut-être la condition en len(data) > 77 pour tenir compte des doubles points (il est inutile de tronquer uniquement le dernier caractère pour le remplacer par un point).

5 votes

@hasenj : Cela ne serait pas conforme au code original, mais c'est une bonne suggestion que j'aurais dû signaler en premier lieu.

2 votes

Notez que les parenthèses incluses sont bien sûr facultatives.

146voto

stanlekub Points 706

Encore plus court :

info = data[:75] + (data[75:] and '..')

3 votes

Drôle d'approche pour le faire. Même si c'est toujours une phrase composite. ^^

6 votes

Cette solution ne comporte-t-elle pas 77 caractères si l'on inclut le " " ?

1 votes

Ne s'agit-il pas d'effectuer deux opérations en tranches ? Je me demande comment cela se comporte par rapport à disons stackoverflow.com/a/52279347/1834057 lorsque les performances sont cruciales

142voto

neil Points 1153

Encore plus concis :

data = data[:75]

Si elle est inférieure à 75 caractères, il n'y aura pas de changement.

11 votes

Il veut probablement qu'une ellipse soit ajoutée si la chaîne est tronquée.

4 votes

Tu as raison, je n'avais jamais remarqué ça. Je n'ai pas trouvé de meilleure façon de le faire que les autres réponses.

13voto

Davide Guerri Points 41

Avec regex :

re.sub(r'^(.{75}).*$', '\g<1>...', data)

Les longues chaînes de caractères sont tronquées :

>>> data="11111111112222222222333333333344444444445555555555666666666677777777778888888888"
>>> re.sub(r'^(.{75}).*$', '\g<1>...', data)
'111111111122222222223333333333444444444455555555556666666666777777777788888...'

Les chaînes plus courtes ne sont jamais tronquées :

>>> data="11111111112222222222333333"
>>> re.sub(r'^(.{75}).*$', '\g<1>...', data)
'11111111112222222222333333'

De cette façon, vous pouvez également "couper" la partie centrale de la corde, ce qui est plus agréable dans certains cas :

re.sub(r'^(.{5}).*(.{5})$', '\g<1>...\g<2>', data)

>>> data="11111111112222222222333333333344444444445555555555666666666677777777778888888888"
>>> re.sub(r'^(.{5}).*(.{5})$', '\g<1>...\g<2>', data)
'11111...88888'

0 votes

Cela n'a pas fonctionné lorsque vous avez des espaces dans votre chaîne de caractères

1 votes

Pourquoi utiliser les regex pour un cas aussi simple ?

0 votes

Cela fonctionne avec des espaces. Par exemple, pour le dernier, la sortie est : '111111111 222222222 333333333 444444444 55555555556666666666777777777 88888...'

11voto

phoenix24 Points 993

Tu pourrais utiliser cette phrase :

data = (data[:75] + '..') if len(data) > 75 else data

2 votes

Ce qui est [:n] appelé pour que je puisse le rechercher dans la documentation ?

2 votes

0 votes

Cette réponse est exactement la même que la réponse acceptée, pourquoi la garder ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X