2009-12-03 3 views
6

J'ai lu la documentation mais je ne comprends pas très bien comment le faire.Comment séparer une chaîne en Python?

Je comprends que j'ai besoin d'une sorte d'identificateur dans la chaîne pour que les fonctions puissent trouver où diviser la chaîne (à moins que je puisse cibler le premier espace dans la phrase?).

Ainsi, par exemple comment pourrais-je partager: "Sico87 is an awful python developer"-"Sico87" et "is an awful Python developer"?

Les chaînes sont extraites d'une base de données (si cela est important).

+1

votre ajout n'est pas approprié. S'il vous plaît poser une nouvelle question. – SilentGhost

+1

Comment était-ce inapproprié? Il posait la même question mais avec des exemples de code? Parler de pédant! – Udders

+2

Ce n'est pas de la pédanterie.StackOverflow est utile précisément parce que les questions séparées sont séparées, donc les bonnes réponses à cette question précise flottent au sommet. Utiliser Python dans n'importe quel système de modèle que vous utilisez est très orthogonal à la façon de diviser une chaîne. –

Répondre

14

Utilisez partition(' ') qui renvoie toujours trois éléments dans le tuple - le premier bit jusqu'à le séparateur, le séparateur, puis les bits après. Les slots dans le tuple qui ne sont pas applicables sont toujours là, juste configurés pour être des chaînes vides.

Exemples: "Sico87 is an awful python developer".partition(' ') retours ["Sico87"," ","is an awful python developer"]

"Sico87 is an awful python developer".partition(' ')[0] retours "Sico87"

Une alternative, plus délicat est d'utiliser split(' ',1) qui fonctionne Similiarly mais renvoie une variables nombre d'éléments. Il retournera un tuple d'un ou deux éléments, le premier élément étant le premier mot jusqu'au délimiteur et le second étant le reste de la chaîne (s'il y en a).

+2

Mauvaise utilisation de l'argument 'maxsplit' – abyx

+1

thx abyx, vu et corrigé pendant que vous étiez en train d'ajouter votre commentaire :) – Will

+1

Je ne sais pas si je dirais que scinder avec maxsplit est plus compliqué, cela fait juste que le déballage de tuple ne fonctionne pas. Je suis en accord avec l'utilisation de partition + tuple déballage pour les cas comme celui-ci, cependant; c'est concis et cohérent. –

19

Utilisez la méthode split sur les chaînes:

>>> "Sico87 is an awful python developer".split(' ', 1) 
['Sico87', 'is an awful python developer'] 

Comment ça marche:

  1. Chaque chaîne est un objet. Les objets de chaîne ont certaines méthodes définies sur eux, comme split dans ce cas. Vous les appelez en utilisant obj.<methodname>(<arguments>).
  2. Le premier argument à split est le caractère qui sépare les sous-chaînes individuelles. Dans ce cas, il s'agit d'un espace, ' '.
  3. Le deuxième argument est le nombre de fois que le fractionnement doit être effectué. Dans votre cas, c'est 1. En quittant ce second argument applique la division aussi souvent que possible:

    >>> "Sico87 is an awful python developer".split(' ') 
    ['Sico87', 'is', 'an', 'awful', 'python', 'developer'] 
    

Bien sûr, vous pouvez également enregistrer les sous-chaînes dans des variables séparées au lieu d'une liste:

>>> a, b = "Sico87 is an awful python developer".split(' ', 1) 
>>> a 
'Sico87' 
>>> b 
'is an awful python developer' 

Mais ne note que cela causera des problèmes si certaines entrées ne contiennent pas d'espaces:

>>> a, b = "string_without_spaces".split(' ', 1) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: need more than 1 value to unpack 
+0

Merci belle façon d'expliquer la fonction de partage – user765443

Questions connexes