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.
Il suffit de ne pas donner de delimètre?
>>> a="test result"
>>> a.split()
['test', 'result']
>>> import re
>>> a="test result"
>>> re.split(" +",a)
['test', 'result']
>>> a.split()
['test', 'result']
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 [].
Un problème avec a.split()
simple?
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']
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']