파이썬에서 한 줄씩 긴 여러 줄 문자열을 읽는 방법


84

나는 줄이 많은 줄의 벽이 있습니다. for절이 있는 줄을 하나씩 읽는 방법은 무엇입니까? 다음은 내가하려는 작업이며 for line in textData줄 에서 참조되는 textData var에 오류가 발생 합니다.

for line in textData
    print line
    lineResult = libLAPFF.parseLine(line)

textData 변수가 존재하고, 내려 가기 전에 인쇄했지만 프리 컴파일러가 오류를 일으키고 있다고 생각합니다.

TIA

데니스


줄을 별도의 문자열로 분할해야합니다. 그 안에 "/ n"이 있다고해서 별도의 문자열이되는 것은 아닙니다.
N_A 2013 년

(트레이스 백과 함께) 어떤 오류가 발생합니까? 의 가치는 textData무엇입니까? SSCCE를 제공해 주시겠습니까 ? 우리가 실행할 수있는 것과 동일한 문제를 볼 수 있으므로 설명 할 수 있습니까?
abarnert 2013 년

또한 "오류를 유발하는" "사전 컴파일러"는 무엇입니까?
abarnert 2013 년

답변:


142

사용은 .splitlines()어떻습니까?

for line in textData.splitlines():
    print(line)
    lineResult = libLAPFF.parseLine(line)

@BenjaminGruenbaum : "/r""/n"슬래시와 편지로 구성된 일반적인 두 문자열은 있습니다. 그랬어 "\n"?
abarnert 2013 년

복사본입니까, 반복자입니까?
user3226167

@ user3226167 목록을 반환 합니다 .
Benjamin Gruenbaum 2017 년

목록을 생성하지 않고 대신 반복자로 반환하는 분할 선의 반복자 버전이 있습니까?
Youda008

StringIO가 있지만 하위 수준의 인터페이스입니다. 즉,이 경우 이미 문자열이 있습니다. 반복자 (예 : 파일)를 한 줄씩 반복하려면 다른 질문입니다. 기억하십시오-이 경우 이미 문자열이 있습니다.
Benjamin Gruenbaum

6

개행으로 분할하여.

for line in wallop_of_a_string_with_many_lines.split('\n'):
  #do_something..

문자열을 반복하는 경우 해당 문자열에서 한 줄이 아닌 문자 단위로 문자를 반복합니다.

>>>string = 'abc'
>>>for line in string:
    print line

a
b
c

지금 이것을 읽고있는 사람이라면 str.splitlines () 함수를 대신 사용하십시오. 이 솔루션에서는 일부 예외적 인 경우가 발생합니다. 예를 들어. 객체의 마지막 줄 끝에 \ n이 있으면 각 줄을 반복한다고 가정하면 for 루프가 빈 줄에서 작업을 시도하고 수행하여 오류를 발생시킵니다. 허용 된 솔루션에서 위에서 논의했습니다.
thefrollickingnerd

1

이 답변은 몇 가지 예외적 인 경우에 실패합니다 (댓글 참조). 위의 허용 된 솔루션이이를 처리합니다. str.splitlines()갈 길입니다. 그럼에도 불구하고 나는이 답변을 참고로 남겨 둘 것입니다.

이전 (오답) 답변 :

s =  \
"""line1
line2
line3
"""

lines = s.split('\n')
print(lines)
for line in lines:
    print(line)

감사합니다, @PR 당신은 나에게 뭔가를 가르쳐주었습니다. 나는에 대한 단서가 없었다import re
DKean

개행 문자로 분할하기 위해 (또는 ) re.split대신 사용 하는 이유는 무엇 입니까? 단일 정적 리터럴 문자로 정규식을 작성하는 것은 이유없이 일을 더 복잡하게 만듭니다. str.splitsplitlines
abarnert 2013 년

@PR 이전 논의에 맞게 s.split ( '\ n')을 작성 했어야한다고 생각합니다. r '\ n'로 분할이 작동하지 않습니다.
David Epstein

내 코드의 복사 및 붙여 넣기가 나를 위해 작동합니다. 하지만 지금 살펴보면 (3 년이 지나면 방금을 사용할 수있었습니다 s.split. 지금 변경
PR

1
split('\n')\r스팅 내의 모든 문자 를 유지합니다 . 캐리지 리턴이 삭제되지 않아 문제가 될 수 있습니다.
Toothpick Anemone
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.