2011-11-18 4 views
1

나는 this과 같은 텍스트를 가지고 있습니다. New LineColons으로 나누고 싶습니다. 지금은 New Lines으로 나눌 것입니다.이 코드를 사용하고 있습니다.새 줄과 콜론으로 줄을 구문 분석하려면 어떻게해야합니까?

`data= data.split('\n') 

및 그 부여 strange output. 좀 도와 줄 수있어? 감사합니다

+2

을 제거합니다

data = [line.strip().split(':') for line in data.split('\n') if line.strip()] 

. 그것은 당신이 묻는 것을 정확히합니다. –

+1

@Matt Ball 왜 '\ t \ t \ t \ t \ t' 표시입니까? 나는 또한'stip()'을 시도했지만 운이 아니었다. – Kulbir

+1

입력 파일에 많은 탭 문자가 있어야하기 때문에. –

답변

9

이 탭이 있습니다. 일 조금을 청소하려면 다음을 수행하십시오 비어 라인과 전혀 이상하지의 스트립 공백

+0

+1 : 그건 내가 '간결'이라고 부르는 것입니다! –

+0

@imim'.split (':')'을 제거했습니다. 결과는''Artist 's :', 'Music : Ramana Gogula' ''입니다. 이제는 '아티스트'와 '음악'의 가치를 읽을 수 있습니까? 감사 – Kulbir

0

str.split() 메서드는 하나의 스플리터 만 허용합니다. 이렇게하면 콜론이나 줄 바꿈 중 하나에서 분할 할 수 없습니다.

data = data.replace(':', '\n').split('\n') # split on newlines and colons 

당신은 또한 분할을보다 세밀하게 제어를위한 re.split() 기능을 시도 할 수 있습니다

: 당신은 같은과 함께 이러한 한계를 극복 할 수

>>> import re 
>>> s = 'abc:def\nghi' 
>>> re.split(r'\:|\n', s) 
['abc', 'def', 'ghi'] 
3

어떻게 출력이 이상하다? 제 말은 많은 표가 \t이고 공백이 있지만 필요에 맞지 않는 것을 설명 할 수 있습니까?

어쩌면 .strip() 줄을 먼저 지정할 수 있습니다. 이렇게하면 공백이 제거됩니다.

0

이 트릭을

data = list(
    line.strip().split(":") for line in data.split("\n") 
) 

data = filter(None, data) 

편집을 수행해야는 "청소기"솔루션하면서 사이먼의 대답은 동일한 결과를 생성합니다.

data = list(
    line.strip().split(":") for line in data.split("\n") if line.strip() 
) 
7

당신이 묻는대로하고 있지만 탭이 가득차 있습니다.

lines = data.split('\n') 
lines = [line.strip() for line in lines] 

을 당신은 당신이 예상하는지 같은 자세한 내용을 볼 수 : strip()를 통해 탭을 제거합니다. 여전히 빈 줄을 떠나

, 그래서 어쩌면 당신은 너무 사람들을 제거 할 수 있습니다 : t \

lines = filter(None, lines) 
관련 문제