it-swarm.com.de

Wie kann ich ein Trennzeichen in Python nach einem oder mehreren Vorkommen aufteilen?

Ich habe eine formatierte Zeichenfolge aus einer Protokolldatei, die wie folgt aussieht:

>>> a="test                            result"

Das heißt, der Test und das Ergebnis werden durch einige Räume aufgeteilt - es war wahrscheinlich formatierten String erstellt, die einen konstanten Abstand gab test.

Einfaches Teilen reicht nicht aus:

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

split(DELIMITER, COUNT) hat einige unnötige Werte gelöscht:

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

Das hat geholfen - aber natürlich brauche ich wirklich:

['test', 'result']

Ich kann von map gefolgt verwenden split() + strip(), aber ich fragte mich, ob es ein Pythonic Weg, es zu tun.

Vielen Dank,

Adam

UPDATE: So eine einfache Lösung! Danke euch allen.

24
Adam Matan

Geben Sie einfach keine Begrenzung an?

>>> 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

Nur das sollte funktionieren:

a.split()

Beispiel:

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

Aus der Dokumentation :

Wenn "sep" nicht angegeben ist oder "None" ist, wird ein anderer Aufteilungsalgorithmus angewendet: Läufe mit aufeinander folgenden Leerzeichen werden als einzelnes Trennzeichen betrachtet. Das Ergebnis enthält am Anfang oder Ende keine leeren Zeichenfolgen, wenn die Zeichenfolge führenden oder nachgestellten Leerzeichen aufweist. Wenn Sie also eine leere Zeichenfolge oder eine Zeichenfolge, die nur aus Leerzeichen besteht, mit einem Trennzeichen Keine trennen, wird [] zurückgegeben.

17
Mark Byers

Irgendein Problem mit einfacher a.split()?

4
YOU

Wenn Sie ein oder mehrere Vorkommen eines Trennzeichens aufteilen möchten und nicht nur mit dem Standardwert split() rechnen möchten, ohne dass Parameter mit Ihrem Anwendungsfall übereinstimmen, können Sie den Trennzeichen mit regex anpassen. Folgendes wird ein oder mehrere Vorkommen von . als Trennzeichen verwenden:

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

was gibt:

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

Fügen Sie einfach eine weitere Möglichkeit hinzu, die in Fällen nützlich ist, in denen sich der Begrenzer vom Leerzeichen unterscheidet und s.split () nicht funktioniert.

wie str = "Python, ist , mehr , flexibel".

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