2010-03-22 52 views
21

我有一個日誌文件,它看起來一個格式化字符串,如:的Python:由1個或多個分隔符的拆分

>>> a="test       result" 

也就是說,檢測以及檢測結果是由一些空間分割 - 它可能是使用格式化的字符串創建的,它給了test一些不變的間距。

簡單的拆分不會做的伎倆:

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

split(DELIMITER, COUNT)清除一些不必要的價值觀:

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

這幫助 - 但當然,我真的需要:

['test', 'result'] 

我可以使用split(),然後是map + strip(),但我想知道是否有更多的Pythonic方式來做到這一點。

感謝,

亞當

UPDATE:這樣一個簡單的解決方案!謝謝你們。

回答

39

只是不給任何分隔符?

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

至於爲什麼這會起作用:a.split(None)是一種特殊情況,它在Python中意味着「分割一個或多個空白字符」。 re.split()是一般情況下的解決方案。 – 2010-03-22 13:23:22

+1

因爲函數不接受關鍵字參數,所以需要使用str.split(None,maxsplit)。我想知道爲什麼。 – tbrittoborges 2015-05-28 12:53:04

+0

的問題是,如何用分隔符+(一個或多個)分割。你的回答是說任何空格將被視爲分隔符,這是不正確的答案 – Risinek 2016-04-08 10:11:06

16

只是這應該工作:

a.split() 

例子:

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

documentation

如果不指定SEP是或無,一個不同的分割算法應用:連續空格的運行被認爲是一個單獨的分隔符,並且結果將不包含空字符串如果字符串具有前導或尾隨空白,則開始或結束。因此,將空字符串或只包含空格的字符串拆分爲無分隔符將返回[]。

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

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

很酷。可能會幫助其他非空白分隔符。 – 2010-03-22 13:23:17

+1

re.split('\ W +',mystring)更相當於string.split(None)。 – 2010-03-22 13:27:16

+5

這是實際請求的唯一答案,「被一個或多個分隔符分割」。 – 2013-04-18 03:02:21

4

簡單a.split()什麼問題嗎?

+0

顯然,沒有。 – 2010-03-22 14:16:09

+0

問題是,如何用分隔符+(一個或多個)分割。你的答案是說任何空白將被視爲分隔符,這是不正確的答案 – Risinek 2016-04-08 10:10:53

0

只需添加一種方法,在分隔符與空格不同的情況下更加有用,而s.split()將不起作用。

like 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']