Come posso raggruppati per 1 o più occorrenze di un delimitatore in Python?
Domanda
ho una stringa formattata da un file di log, che si presenta come:
>>> a="test result"
Cioè, il test e il risultato sono divise da alcuni spazi - è stata probabilmente creata usando stringa formattata che ha dato un po 'di test
distanza costante
scissione semplice non farà il trucco:
>>> a.split(" ")
['test', '', '', '', ... '', '', '', '', '', '', '', '', '', '', '', 'result']
split(DELIMITER, COUNT)
cancellato alcuni valori non necessari:
>>> a.split(" ",1)
['test', ' result']
Questo ha aiutato - ma, naturalmente, ho davvero bisogno:
['test', 'result']
posso usare split()
seguito da map
+ strip()
, ma mi chiedevo se c'è un modo più Pythonic per farlo.
Grazie,
Adam
UPDATE: Una tale soluzione semplice! Grazie a tutti.
Soluzione
Basta non dare alcuna delimeter?
>>> a="test result"
>>> a.split()
['test', 'result']
Altri suggerimenti
>>> import re
>>> a="test result"
>>> re.split(" +",a)
['test', 'result']
>>> a.split()
['test', 'result']
Proprio questo dovrebbe funzionare:
a.split()
Esempio:
>>> 'a b'.split(' ')
['a', '', '', '', '', '', 'b']
>>> 'a b'.split()
['a', 'b']
Se sep non viene specificato o è None, un algoritmo scissione diverso viene applicato: percorsi di spazi consecutivi sono considerati come un unico separatore, e il risultato non conterrà stringhe vuote all'inizio o alla fine se la stringa è iniziale o finale spazi bianchi. Di conseguenza, dividendo una stringa vuota o una stringa contenente solo spazi bianchi con un separatore nessun ritorni [].
Qualsiasi problema con la semplice a.split()
?
Se si desidera dividere da 1 o più occorrenze di un delimitatore e non si vuole contare solo sulla split()
di default senza parametri che accadono per abbinare il vostro caso d'uso, è possibile utilizzare espressioni regolari per abbinare il delimitatore. Di seguito vi utilizzare uno o più occorrenze di .
come delimitatore:
s = 'a.b....c......d.ef...g'
sp = re.compile('\.+').split(s)
print(sp)
che dà:
['a', 'b', 'c', 'd', 'ef', 'g']
Solo l'aggiunta di un altro modo, più utile nei casi in cui delimitatore è diverso dallo spazio, e s.split () non funzionerà.
come str = "Python, è ,, più ,,,,, flessibile".
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']