2012-04-18 9 views
1

내가 문자열을 파이썬 문자열에서 휴식포맷 라인은

f_email, f_title, f_description, blank = message.split('\n') 

하지만이 같은 메시지가있을 때 문제가 발생합니다 :

"To: email\ntitle: add title here\nDescription: first line\nSecond line\nthirdline\n" 

문자열을 분리하면 설명도 분리됩니다. 나는 시도했다 :

f_email, f_title, f_description, blank = message.split('\n',4) 

그러나 분명히 ValueError가 반환된다. 왜냐하면 4 \ n을 더 나누기 때문이다.

제안 사항?

+0

, 당신은 단지'에 분할 수 \ n', 첫 번째 요소는 전자 메일, 두 번째 제목,''\ n ''. –

+0

어쩌면 파일을 한 줄씩 읽을 수 있습니다. – Akavall

답변

4

.split('\n')을 실행하면 목록이 반환됩니다. 당신이 분할 될 때 변수를 할당하는 대신, 당신은 목록에서 끌어 오기 :이 목록의 크기를 확인하여 덜 취약 할 수

tokens = message.split('\n') 
f_email = tokens[0] 
f_title = tokens[1] 
f_description = tokens[2] 

. 경우에 당신은 당신이 할 수있는, 그것은 적어도 세 가지 요소를 필요로 알고

tokens = message.split('\n') 
try: 
    f_description = tokens[2] 
except: 
    f_description = None 

당신이를 처리 할 수있는 방법 :

assert(len(tokens)>=3) 

이 주위에 얻을 수있는 또 다른 방법은 try/except 블록에서 일을 래핑하는 것입니다 짧은 목록의 경우 당신이 좋아하는 정확한 방법!

+0

놀라운 감사! – Neeran

4

@Hooked는 Python2에 대한 좋은 대답을주었습니다. Python3에서 튜플 풀기에도 * 작품은, 당신이 할 수 있기 때문에 :

f_email, f_title, *f_description = tokens 

를 세부 사항은 당신이 전체 텍스트를 사용하지 않으려면 PEP 3132

+0

Arg, 나는 이것을 게시하려하고 있었다.) +1, 3.x 사용자에게 좋은 해결책이다. 완성을 위해 –

+0

을 사용하면 f_description의 요소를 '\ n'과 결합하여 원래 설명 문자열을 다시 얻을 수 있습니다. – covertCoder

+0

또한이 정신의 솔루션은 처리를 수행하는 메소드에'* 토큰 '을 전달하여 Python2에 적용될 수 있습니다. –

1

에, 3 아래 있지 좋은 플랫 풀기를 사용하는 .X, 당신은 다음과 같이 그것을 간단하게 할 수 있습니다 : 당신이 message.split를 사용하는 경우

email = None 
title = None 
description = "" 
with open("test.txt", "r") as f: 
    for number, line in enumerate(f): 
     if number == 0: 
      email = line.strip() 
     elif number == 1: 
      title = line.strip() 
     else: 
      description += line 
+0

+1 : 고맙습니다. 파일에서 매우 긴 문자열이 있으면 코드가 조금 오래 나타날 수 있습니다. – Neeran

1

가 ('\ n을'을, 2) 세 부분을 얻을 : 첫 번째 줄, 두 번째 줄과 나머지를 하나의 라인.

사용이 양식 :

f = open("file.txt") 
f_email, f_title, f_description = f.read.split('\n', 2) 
f.close() 

또는이 : '받는 사람'과 '제목이'없는 내부 바꿈과 자신의 줄에 항상있는 경우

f = open("file.txt") 
f_email = f.readline() 
f_title = f.readline() 
f_description = f.read() 
f.close()