web-dev-qa-db-fra.com

Comment puis-je diviser et analyser une chaîne en Python?

J'essaie de scinder cette chaîne en python: 2.7.0_bf4fda703454

Je veux diviser cette chaîne sur le trait de soulignement _ afin de pouvoir utiliser la valeur sur le côté gauche.

101
kamal

"2.7.0_bf4fda703454".split("_") donne une liste de chaînes:

In [1]: "2.7.0_bf4fda703454".split("_")
Out[1]: ['2.7.0', 'bf4fda703454']

Cela divise la chaîne à chaque trait de soulignement . Si vous souhaitez qu’il s’arrête après le premier partage, utilisez "2.7.0_bf4fda703454".split("_", 1).

Si vous savez pertinemment que la chaîne contient un trait de soulignement, vous pouvez même décompresser le LHS et le RHS en variables distinctes:

In [8]: lhs, rhs = "2.7.0_bf4fda703454".split("_", 1)

In [9]: lhs
Out[9]: '2.7.0'

In [10]: rhs
Out[10]: 'bf4fda703454'

Une alternative consiste à utiliser partition() . L'utilisation est similaire au dernier exemple, à la différence qu'il renvoie trois composants au lieu de deux. L'avantage principal est que cette méthode n'échoue pas si la chaîne ne contient pas le séparateur.

132
NPE

Procédure pas à pas d'analyse de chaîne python

Fractionner une chaîne dans l'espace, obtenir une liste, afficher son type, l'imprimer:

el@apollo:~/foo$ python
>>> mystring = "What does the fox say?"

>>> mylist = mystring.split(" ")

>>> print type(mylist)
<type 'list'>

>>> print mylist
['What', 'does', 'the', 'fox', 'say?']

Si vous avez deux délimiteurs l'un à côté de l'autre, une chaîne vide est supposée:

el@apollo:~/foo$ python
>>> mystring = "its  so   fluffy   im gonna    DIE!!!"

>>> print mystring.split(" ")
['its', '', 'so', '', '', 'fluffy', '', '', 'im', 'gonna', '', '', '', 'DIE!!!']

Fractionnez une chaîne sur le trait de soulignement et prenez le cinquième élément de la liste:

el@apollo:~/foo$ python
>>> mystring = "Time_to_fire_up_Kowalski's_Nuclear_reactor."

>>> mystring.split("_")[4]
"Kowalski's"

Réduire plusieurs espaces en un

el@apollo:~/foo$ python
>>> mystring = 'collapse    these       spaces'

>>> mycollapsedstring = ' '.join(mystring.split())

>>> print mycollapsedstring.split(' ')
['collapse', 'these', 'spaces']

Lorsque vous ne transmettez aucun paramètre à la méthode split de Python, la documentation indique : "les séquences de blancs consécutifs sont considérées comme un séparateur unique et le résultat ne contiendra aucune chaîne vide au début ou à la fin si la chaîne a espaces de début ou de fin ".

Tenez votre chapeau, garçons, analysez une expression régulière:

el@apollo:~/foo$ python
>>> mystring = 'zzzzzzabczzzzzzdefzzzzzzzzzghizzzzzzzzzzzz'
>>> import re
>>> mylist = re.split("[a-m]+", mystring)
>>> print mylist
['zzzzzz', 'zzzzzz', 'zzzzzzzzz', 'zzzzzzzzzzzz']

L'expression régulière "[a-m] +" signifie les lettres minuscules a à m qui se produisent une ou plusieurs fois sont associées en tant que délimiteur. re est une bibliothèque à importer.

Ou si vous souhaitez modifier les éléments un à un:

el@apollo:~/foo$ python
>>> mystring = "theres coffee in that nebula"

>>> mytuple = mystring.partition(" ")

>>> print type(mytuple)
<type 'Tuple'>

>>> print mytuple
('theres', ' ', 'coffee in that nebula')

>>> print mytuple[0]
theres

>>> print mytuple[2]
coffee in that nebula
72
Eric Leschinski

S'il doit toujours s'agir d'une division même LHS/RHS, vous pouvez également utiliser la méthode partition intégrée aux chaînes. Il retourne un 3-Tuple sous la forme (LHS, separator, RHS) si le séparateur est trouvé et (original_string, '', '') si le séparateur n'était pas présent:

>>> "2.7.0_bf4fda703454".partition('_')
('2.7.0', '_', 'bf4fda703454')

>>> "shazam".partition("_")
('shazam', '', '')
17
bgporter