2013-01-31 6 views
1

저는 Python을 처음 접했습니다. 내가 사용하는 외부 시뮬레이션 소프트웨어는 다음 형식의 데이터를 포함하는 보고서를 제공합니다.일반 구분 기호없이 파이썬 문자열 분할

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

위의 데이터를 4 개의 문자열 즉,

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

날짜를 여러 문자열로 나누기 때문에 str.split을 사용할 수 없습니다. 1과 첫 번째 날짜 사이와 첫 번째와 두 번째 날짜 사이에 네 개의 공백이있는 것으로 보입니다. 이것이 4 개의 공백 또는 탭인지 나는 모른다.

분할시 구분 기호로 '\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:] 

그러나 Jan 02이 Jan 2로 표시되는 경우이 값이 문자열이 가변적 일 수 있습니다

관련 문제