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.

È stato utile?

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']
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top