web-dev-qa-db-fra.com

Comment tronquer une chaîne en utilisant str.format en Python?

Comment tronquer une chaîne en utilisant str.format en Python? Est-ce même possible?

Il y a un paramètre width mentionné dans le Format Specification Mini-Language :

format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]
...
width       ::=  integer
...

Mais le spécifier ne fonctionne apparemment que pour le remplissage, pas pour la tronquer:

>>> '{:5}'.format('aaa')
'aaa  '
>>> '{:5}'.format('aaabbbccc')
'aaabbbccc'

C'est donc plus une largeur minimale qu'une largeur vraiment.

Je sais que je peux découper des chaînes, mais les données que je traite ici sont complètement dynamiques, y compris la chaîne de format et les arguments qui entrent. Je ne peux pas simplement aller en découper explicitement une.

45
famousgarkin

Utilisation .precision au lieu:

>>> '{:5.5}'.format('aaabbbccc')
'aaabb'

Selon la documentation du Format Specification Mini-Language :

précision est un nombre décimal indiquant le nombre de chiffres à afficher après le point décimal pour une valeur à virgule flottante formatée avec 'f' et 'F', ou avant et après la virgule décimale pour une valeur à virgule flottante formatée avec 'g' ou 'G'. Pour les types non numériques, le champ indique la taille maximale du champ - en d'autres termes, combien de caractères seront utilisés à partir du contenu du champ. Le precision n'est pas autorisé pour les valeurs entières.

71
falsetru