Comment tronquer une chaîne à 75 caractères en Python?
Voici comment cela se fait en JavaScript:
var data="saddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddsaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddsadddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
var info = (data.length > 75) ? data.substring[0,75] + '..' : data;
len(data) > 77
tenir compte des doubles points (il est inutile de tronquer uniquement le dernier caractère uniquement pour le remplacer par un point).Encore plus court:
la source
Encore plus concis:
S'il est inférieur à 75 caractères, il n'y aura aucun changement.
la source
Si vous utilisez Python 3.4+, vous pouvez utiliser à
textwrap.shorten
partir de la bibliothèque standard:la source
shorten()
tronque les mots , pas les caractères simples. J'ai cherché mais il ne semble pas y avoir de moyen de configurershorten()
ou d'TextWrapper
instance pour couper des caractères uniques et non des mots.Pour une solution Django (qui n'a pas été mentionnée dans la question):
Jetez un œil au code source de Truncator pour apprécier le problème: https://github.com/django/django/blob/master/django/utils/text.py#L66
Concernant la troncature avec Django: la troncature HTML de Django
la source
Vous pouvez utiliser ce one-liner:
la source
[:n]
s'appelle-t-on pour que je puisse le chercher dans la documentation?Avec regex:
Les chaînes longues sont tronquées:
Les chaînes plus courtes ne sont jamais tronquées:
De cette façon, vous pouvez également "couper" la partie médiane de la chaîne, ce qui est plus agréable dans certains cas:
la source
Cette méthode n'en utilise pas si:
data[:75] + bool(data[75:]) * '..'
la source
la source
75
) dans une variable pour éviter les incohérences.limit = 75; info = data[:limit] + '..' * (len(data) > limit)
Encore une autre solution. Avec
True
etFalse
vous obtenez un petit retour sur le test à la fin.la source
Ceci juste en:
la source
la source
Vous ne pouvez pas réellement "tronquer" une chaîne Python comme vous pouvez faire une chaîne C allouée dynamiquement. Les chaînes en Python sont immuables. Ce que vous pouvez faire est de découper une chaîne comme décrit dans les autres réponses, produisant une nouvelle chaîne contenant uniquement les caractères définis par les décalages et l'étape de découpage. Dans certains cas (non pratiques), cela peut être un peu ennuyeux, comme lorsque vous choisissez Python comme langue d'interview et que l'intervieweur vous demande de supprimer les caractères en double d'une chaîne en place. Doh.
la source
la source
Il n'y a pas besoin d'une expression régulière mais vous souhaitez utiliser le formatage de chaîne plutôt que la concaténation de chaîne dans la réponse acceptée.
C'est probablement la manière la plus canonique et Pythonique de tronquer la chaîne
data
à 75 caractères.la source
saddddddd...
chaîne se transforme111111...
:) Je sais cependant que c'est une faute de copier-coller, et je suis d'accord avec vous sur les expressions régulières.Voici une fonction que j'ai créée dans le cadre d'une nouvelle classe String ... Elle permet d'ajouter un suffixe (si la chaîne est de taille après l'ajustement et l'ajout est assez long - bien que vous n'ayez pas besoin de forcer la taille absolue)
J'étais en train de changer quelques choses autour donc il y a des coûts logiques inutiles (si _truncate ... par exemple) où ce n'est plus nécessaire et il y a un retour en haut ...
Mais, c'est toujours une bonne fonction pour tronquer les données ...
la source
la source