2016-11-28 1 views
2

저는 파이썬 (3)을 배우고 있습니다. 나는이 선들을 각각 4 개의 조각으로 나누고 싶다.어떻게이 문자열을 파이썬으로 분할 할 수 있습니까?

[Test Branch]    bobjones  0   6/13/2008 4:24 PM 
[Todd's Workspace]  tfatcher  0   6/16/2008 9:20 AM 
[Henry]     hmckinkley  1   6/17/2008 10:12 AM 
[Henry]     hmckinkley  0   6/17/2008 10:15 AM 

각 줄마다 line.split()을 호출 할 수 있습니다. 그런 다음 다시 날짜를 넣을 수 있습니다. 그리고 첫 번째 [] 섹션의 공백은이 규칙도 배제합니다. 슬라이스 할 수 있다고 생각하지만,이 데이터가 고정 너비로 ​​보이는 것은 100 % 확신 할 수 없습니다. 아마 정규 표현식이 가장 좋습니다. 그것에 관한 어떤 포인터라도?

업데이트 : 데이터의 나머지 부분이 종료되도록

branch,user,version,timestamp = [commitheaderline.split("]", 1)[0] + "]"] + commitheaderline.split("]", 1)[1].split(None, 2) 

을하지만 그때 나는 사용자 이름 (예 : 아래) 너무 긴 일부 데이터가 발생했습니다 :이 잘 작동 거라고 셀축의 솔루션 @ 생각 새 줄에. 그래서 나는 지금 그것에 대해 연구 중이다. Split()을 실행하기 전에 어떻게 든 선을 테스트한다고 생각하고, "적절한"선처럼 보이지 않으면 다음 선으로 연결합니다.

[Test Branch]    bobjones  0   6/13/2008 4:24 PM 
[Todd's Workspace]  tfatcher  0   6/16/2008 9:20 AM 
[cole]     bob.darknsdale 
             0  7/27/2012 12:49 PM 
+0

직접 시도한 사항이 있습니까? –

+0

간단히'line.split (None, 4)'입니다. – TigerhawkT3

+4

@ TigerhawkT3 이것은 또한 [Test "와"Branch] "를 분할합니다." – Selcuk

답변

0

당신이 할 수있는 다음

[line.split("]", 1)[0] + "]"] + line.split("]", 1)[1].split(None, 2) 

import re 
sep = re.split(" {2,}", str) 

캐릭터 라인은 이상으로 분리되는 경우가 작동을 시도

['[Test Branch]', 'bobjones', '0', '6/13/2008 4:24 PM'] 
+0

인덱스 범위를 벗어난 오류 'commitdetails = [part.split ("]", 1) [0] + "]"] + part.split ("]"1) [1] .split , 2)'. 아마 내가 이것을 통해 실행되는 다른 데이터 라인을 가지고 있기 때문일 것입니다. (나는 그들을 무시하고 있습니다.) –

+0

예, 외계 선을 제거하면 작동합니다. –

+0

당신의 솔루션을 사용하여 끝났습니다. 고마워요. –

2

가 발생합니다 하나의 공백. 이러한 경우 탭

import re 
sep = re.split("\t+", str) 
+0

@ TigerhawkT3이 주석 처리 된 시점과 열 값에 공백이있는 경우 사이에 공백이 하나만 있으면이 작업이 실패합니다. – Selcuk

+0

아마도 OP는 그가 작업하고있는 구체적인 내용을 자세히 설명해야합니다. 그것은 주어진 예제들에 대해 작동합니다. – sakurashinken

+1

은 공백을'\ s','re로 바꿀 수 있습니다.split ("\ s {2,}", str)'이면 스페이스/탭을 모두 처리 할 것입니다. – Skycc

0
In [4]: import re 

In [5]: print text 

[Test Branch]    bobjones  0   6/13/2008 4:24 PM 
[Todd's Workspace]  tfatcher  0   6/16/2008 9:20 AM 
[Henry]     hmckinkley  1   6/17/2008 10:12 AM 
[Henry]     hmckinkley  0   6/17/2008 10:15 AM 


In [6]: pattern = re.compile(r'(\[.*?\])\s+(\w+)\s+(\d+)\s+(.*?$)', re.M) 


In [7]: for match in pattern.finditer(text): 
    ...:  #do whatever you want here. cols are grouped 
    ...:  print "first col: %s - 4th col: %s" %(match.group(1), match.group(4)) 
    ...: 
    ...: 
first col: [Test Branch] - 4th col: 6/13/2008 4:24 PM 
first col: [Todd's Workspace] - 4th col: 6/16/2008 9:20 AM 
first col: [Henry] - 4th col: 6/17/2008 10:12 AM 
first col: [Henry] - 4th col: 6/17/2008 10:15 AM 

이 공백이나 탭의 크기와 함께 작동합니다 시도 묘사.

관련 문제