2013-01-31 81 views
1

我對Python相當陌生。我使用一個外部的模擬軟件給我的報告,其中包括以下格式的數據:沒有公共分隔符的Python字符串拆分

1 29 Jan 2013 07:33:19.273 29 Jan 2013 09:58:10.460   8691.186 

我期待上面的數據分割成四根弦即;

'1', '29 Jan 2013 07:33:19.273', '29 Jan 2013 09:58:10.460', '8691.186' 

我不能使用str.split,因爲它將日期分成多個字符串。在1到第一個日期之間以及第一個和第二個日期之間似乎有四個空格。我不知道這是四個空格還是製表符。

使用'\t'作爲分割上的分隔符並沒有太大的作用。如果我指定' '(4個空格)作爲分隔符,我會得到前三個字符串。然後我得到一個空字符串和最後一個字符串中的空格。第二個日期和數字之間有10個空格。

有關如何處理這個問題的任何建議將會非常有幫助!

謝謝!

+0

你的子串是否總是以相同的順序和類型出現? (在你的例子 - >號碼,日期,日期,號碼) –

+0

它實際上是一個固定寬度的輸出格式?現在這是一種古老的學校,但是我在天文學數據中已經看到它了(可能意味着根本沒有_no_分隔符,只是填充)。 –

+0

@DonalFellows:那麼,由於日期是一個相當固定的格式,所以填充耗盡的唯一字段就是那裏的初始計數器號。 –

回答

9

您可以在一個以上的空間分成一個簡單的正則表達式:

import re 

multispace = re.compile(r'\s{2,}') # 2 or more whitespace characters 
fields = multispace.split(inputline) 

示範:

>>> import re 
>>> multispace = re.compile(r'\s{2,}') # 2 or more whitespace characters 
>>> multispace.split('1 29 Jan 2013 07:33:19.273 29 Jan 2013 09:58:10.460   8691.186') 
['1', '29 Jan 2013 07:33:19.273', '29 Jan 2013 09:58:10.460', '8691.186'] 
0

如果數據是固定寬度,您可以使用文字處理字符串中

n=str[0] 
d1=str[2:26] 
d2=str[27:51] 
l=str[52:] 

但是,如果1月2日顯示爲1月2日這可能不工作的寬度字符串可能是可變的