Sortie des 100 premiers caractères d'une chaîne

108

Peut sembler trouver une fonction de sous-chaîne en python.

Dites que je veux afficher les 100 premiers caractères d'une chaîne, comment puis-je faire cela?

Je veux le faire en toute sécurité également, en mesurant si la chaîne est de 50 caractères, elle ne devrait pas échouer.

Blankman
la source
2
La suite de cette question est: Bon amorce pour la notation de tranche Python
Greg Hewgill
1
Que voulez-vous dire par "personnages"? Points de code, grappes de graphèmes ou unités de code? Le découpage comptera les unités de code, ce qui pourrait ne pas donner le résultat souhaité.
Philipp

Réponses:

168
print my_string[0:100]
icktoofay
la source
5
cela fonctionne aussi pour les cordes plus courtes que 100, par exemple print 'foo'[:100](notez que len('foo')c'est 3, donc même quand foo[100]ça ne marche pas, ça marche)
Rodrigo Laguna
67

À partir du didacticiel python :

Les indices de tranche dégénérés sont gérés avec élégance: un index trop grand est remplacé par la taille de la chaîne , une limite supérieure plus petite que la limite inférieure renvoie une chaîne vide.

Il est donc sûr à utiliser x[:100].

Czchen
la source
27

Facile:

print mystring[:100]
Arkady
la source
7

Pour répondre à la préoccupation de Philipp (dans les commentaires), le découpage fonctionne également pour les chaînes Unicode

>>> greek=u"αβγδεζηθικλμνξοπρςστυφχψω"
>>> print len(greek)
25
>>> print greek[:10]
αβγδεζηθικ

Si vous souhaitez exécuter le code ci-dessus en tant que script, placez cette ligne en haut

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

Si votre éditeur n'enregistre pas dans utf-8, remplacez l'encodage correct

John La Rooy
la source
2
Je ne dénigre pas votre réponse, mais il n'y en a que 24 lettres en grec, ςet σc'est la même lettre :-)
paxdiablo
4
@paxdiablo, doh! Je les ai copiés sur la page wikipedia. Heureusement, je n'ai pas nommé la variable greek_alphabetalors :)
John La Rooy
4

Le découpage des tableaux se fait avec [first:last+1].

Une astuce que j'ai tendance à utiliser beaucoup est d'indiquer des informations supplémentaires avec des ellipses. Donc, si votre champ est de cent caractères, j'utiliserais:

if len(s) <= 100:
    print s
else:
    print "%s..."%(s[:97])

Et oui, je sais que ()c'est superflu dans ce cas pour l' %opérateur de formatage, c'est juste mon style.

paxdiablo
la source
J'imagine que c'était là une matière à réflexion, mais dans le cas du PO, je ne suggérerais probablement pas de le faire. Le résultat serait une chaîne que vous auriez à vérifier pour le contenu à couper davantage ou quelque chose comme ça. Dans ce cas, j'imagine que l'on voudrait soit que ce nombre soit variable et que le résultat soit toujours correct, soit le nombre à fixer et la gestion produisant quelque chose de significatif, ou une erreur ou renvoyant gracieusement en cas d'échec. Je ne peux pas penser à de nombreux cas, à part la fourniture d'informations lisibles par l'homme, où je voudrais ajouter du texte arbitrairement à une chaîne.
3

La plupart des exemples précédents lèveront une exception au cas où votre chaîne ne serait pas assez longue.

Une autre approche consiste à utiliser 'yourstring'.ljust(100)[:100].strip().

Cela vous donnera les 100 premiers caractères. Vous pouvez obtenir une chaîne plus courte au cas où les derniers caractères de votre chaîne seraient des espaces.

Julien Kieffer
la source
Merci. C'est étrange pourquoi les meilleures réponses sur stackoverflow ne sont pas facilement reconnues et votées.
Basil Musa le
3

Le formatage de chaîne à l'aide %est un excellent moyen de gérer cela. Voici quelques exemples.

Le code de mise en forme se '%s'convertit '12345'en une chaîne, mais c'est déjà une chaîne.

>>> '%s' % '12345'

'12345'

'%.3s' spécifie de n'utiliser que les trois premiers caractères.

>>> '%.3s' % '12345'

'123'

'%.7s'dit d'utiliser les sept premiers caractères, mais il n'y en a que cinq. Aucun problème.

>>> '%.7s' % '12345'

'12345'

'%7s' utilise jusqu'à sept caractères, en remplissant les caractères manquants avec des espaces à gauche.

>>> '%7s' % '12345'

'  12345'

'%-7s' est la même chose, sauf remplir les caractères manquants à droite.

>>> '%-7s' % '12345'

'12345  '

'%5.3' dit d'utiliser les trois premiers caractères, mais remplissez-les d'espaces sur la gauche pour totaliser cinq caractères.

>>> '%5.3s' % '12345'

'  123'

Même chose sauf remplissage à droite.

>>> '%-5.3s' % '12345'

'123  '

Peut également gérer plusieurs arguments!

>>> 'do u no %-4.3sda%3.2s wae' % ('12345', 6789)

'do u no 123 da 67 wae'

Si vous avez besoin d'encore plus de flexibilité, str.format()est également disponible. Voici la documentation pour les deux.

OrangeSorbet
la source
0
[start:stop:step]

Donc, si vous ne voulez prendre que 100 premiers caractères, utilisez your_string[0:100]ou your_string[:100] Si vous ne voulez prendre que le caractère à la position paire, utilisez your_string[::2] Les "valeurs par défaut" pour le début sont 0, pour stop - len de la chaîne et pour l 'étape - 1. Donc quand vous n'en fournissez pas un et mettez ':', il l'utilisera comme valeur par défaut.

Szymek G
la source