2010-03-22 10 views
21

ich aus einer Protokolldatei eine formatierte Zeichenfolge haben, die wie folgt aussieht:Python: Split von 1 oder mehr Vorkommen eines Begrenzungs

>>> a="test       result" 

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

Einfache Spaltung wird nicht den Trick:

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

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

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

Dies half - aber natürlich ich wirklich brauchen:

['test', 'result'] 

Ich kann split() gefolgt von mapverwenden, aber ich fragte mich, ob es einen pythonischen Weg gibt, es zu tun.

Danke,

Adam

UPDATE: Eine solche einfache Lösung! Danke euch allen.

Antwort

39

Geben Sie einfach kein Delimeter?

+9

Warum das funktioniert: a.split (None) ist ein Sonderfall, der in Python "auf einen oder mehrere Leerzeichen chars" bedeutet. re.split() ist die allgemeine Falllösung. –

+1

Man muss str.split (None, maxsplit) verwenden, da die Funktion keine Schlüsselwortargumente akzeptiert. Ich wundere mich warum. – tbrittoborges

+0

die Frage war, wie mit Trennzeichen + (ein oder mehrere) aufgeteilt werden. Sie antworten, dass eines der Leerzeichen als Trennzeichen verwendet wird, was nicht die richtige Antwort ist – Risinek

16

Nur sollte diese Arbeit:

a.split() 

Beispiel:

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

Vom documentation:

Wenn September nicht angegeben oder ist keine, ein anderer Teilungsalgorithmus angewandt wird Englisch: www.weisang.info/index.php?id=143&t...h=dddb8dcdcd: Läufe von aufeinander folgenden Leerzeichen werden als ein einzelnes Trennzeichen betrachtet, und das Ergebnis enthält keine leeren Zeichenfolgen Start oder Ende, wenn die Zeichenfolge führende oder nachfolgende Leerzeichen enthält. Wenn Sie also eine leere Zeichenfolge oder eine Zeichenfolge bestehend aus nur Leerzeichen mit einem Trennzeichen None aufteilen, wird [] zurückgegeben.

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

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

Kühl. Könnte bei anderen Nicht-Leerzeichenbegrenzern helfen. –

+1

re.split ('\ W +', mystring) ist gleichwertig string.split (None). –

+5

Dies ist die einzige Antwort auf die tatsächliche Anforderung "durch 1 oder mehr Vorkommen eines Trennzeichens aufgeteilt". –

4

Jedes Problem mit einfachen a.split()?

+0

Anscheinend keine. –

+0

die Frage war, wie mit Trennzeichen + (ein oder mehrere) aufgeteilt werden. Sie antworten, dass whitespace als Trennzeichen verwendet wird, was nicht korrekt ist Antwort – Risinek

0

Nur einen Weg hinzufügen, nützlicher in Fällen, in denen Trennzeichen vom Leerzeichen unterscheidet, und s.split() wird nicht funktionieren.

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'] 
Verwandte Themen