web-dev-qa-db-fra.com

Comment puis-je scinder par 1 ou plusieurs occurrences d'un délimiteur en Python?

J'ai une chaîne formatée à partir d'un fichier journal, qui ressemble à ceci:

>>> a="test                            result"

Autrement dit, le test et le résultat sont divisés par quelques espaces - il a probablement été créé à l'aide d'une chaîne formatée qui a donné à test un espacement constant.

Le fractionnement simple ne fera pas l'affaire:

>>> a.split(" ")
['test', '', '', '', ... '', '', '', '', '', '', '', '', '', '', '', 'result']

split(DELIMITER, COUNT) a effacé certaines valeurs inutiles:

>>> a.split(" ",1)
['test', '                           result']

Cela a aidé - mais bien sûr, j'ai vraiment besoin de:

['test', 'result']

Je peux utiliser split() suivi de map + strip(), mais je me demandais s’il existait un moyen plus pythonique de le faire.

Merci,

Adam

MISE À JOUR: Une solution si simple! Merci à tous.

24
Adam Matan

Il suffit de ne pas donner de delimètre?

>>> a="test                            result"
>>> a.split()
['test', 'result']
46
Kimvais
>>> import re
>>> a="test                            result"
>>> re.split(" +",a)
['test', 'result']

>>> a.split()
['test', 'result']
29
ghostdog74

Juste cela devrait fonctionner:

a.split()

Exemple:

>>> 'a      b'.split(' ')
['a', '', '', '', '', '', 'b']
>>> 'a      b'.split()
['a', 'b']

De la documentation :

Si sep n'est pas spécifié ou est défini sur None, un algorithme de fractionnement différent est appliqué: les suites d'espaces consécutives sont considérées comme un séparateur unique et le résultat ne contient aucune chaîne vide au début ou à la fin si la chaîne est précédée ou terminée. Par conséquent, le fractionnement d'une chaîne vide ou d'une chaîne composée uniquement d'espaces avec un séparateur Aucun renvoie [].

17
Mark Byers

Un problème avec a.split() simple?

4
YOU

Si vous souhaitez scinder une ou plusieurs occurrences d'un délimiteur et ne souhaitez pas uniquement compter sur la fonction split() par défaut sans qu'aucun paramètre ne corresponde à votre cas d'utilisation, vous pouvez utiliser regex pour faire correspondre le délimiteur. Ce qui suit utilisera une ou plusieurs occurrences de . en tant que délimiteur:

s = 'a.b....c......d.ef...g'
sp = re.compile('\.+').split(s)
print(sp)

qui donne:

['a', 'b', 'c', 'd', 'ef', 'g']
1
theferrit32

Il suffit d’ajouter une méthode supplémentaire, plus utile dans les cas où le délimiteur est différent de l’espace, et s.split () ne fonctionnera pas.

comme str = "Python, is , more , flexible".

In [27]: s = "Python is   more      flexible"

In [28]: str_list = list(filter(lambda x: len(x) > 0, s.split(" ")))

In [29]: str_list
Out[29]: ['Python', 'is', 'more', 'flexible']
0
anshu kumar