2014-01-24 1 views
1

나는 간단한 텍스트 파일을 읽고 파이썬에서 목록으로 인쇄, 그래서 나는 다음과 같이 while 루프를 실행하고 있습니다 :왜 파이썬 3에서 파일을 읽는 동안 끝에 예기치 않은 '?

while line != "": 
     line = file_ob.readline().strip() 
     genres.append(line) 

모든 것이 완벽하게 정상적으로, 그러나 마지막에 ""도 인쇄되어 작동합니다.

제 질문은 왜 이런 일입니까? 줄이 ""이거나 말하기가 텍스트 파일의 끝에 도달했기 때문에, 루프가 깨져서 출력이 표시되지 않고 ""이 아닌 것입니까? 아마 여기 논리에 결함이 있을까요? 이 문제를 해결하려면 어떻게해야합니까?

답변

1

루프가 중간에서 자동으로 끊어지지 않습니다. 그것은 바닥으로 돌아가고, 그 다음 위로 가기로 돌아가서 상태를 다시 확인합니다. 따라서 빈 줄을 읽고 추가하고 비어 있는지 확인한 다음 끊습니다. 마지막 라인을 제외 할 경우, 일반적으로 다음과 같이 기록됩니다

while (line = file_ob.readline().strip()) != "": 
    genres.append(line) 

(EDIT가 : 할당이 표현되지 않기 때문에 영업 이익 노트,이 대부분의 다른 언어와는 달리, 파이썬에서 유효한 구문 아니다 .)

나이 : 당신이 정의하는 방법을 line 표시되지 않습니다 시작 부분부터

line = file_ob.readline().strip() 
while line != "": 
    genres.append(line) 
    line = file_ob.readline().strip() 

는 사실,이 중 어느 것도, 코드와 매우 동일합니다. 이것은 또한 작동 할 것입니다 :

while True: 
    line = file_ob.readline().strip() 
    if line == "": 
     break 
    genres.append(line) 
+0

u 보시다시피 저는 line = 'anything'이라고 말하면서 루프를 작동시켜야합니다. 두 번째 옵션을 사용하면 목록에 '원하지 않는'항목이 포함됩니다. 첫 번째 옵션이 작동하지 않는 것 같습니다. – Amin

+0

훨씬 더 쉬운 해결책은 선을 먼저 읽고 '무'대신 선에 할당하는 것입니다. 도움을 주신 덕분에 – Amin

+0

아, 실제로 첫 번째 옵션이 작동하지 않습니다. 어리석은 파이썬입니다. (어리석은 생각으로는 예전과 다른 방식으로 작동합니다.) 두 번째 옵션은'line = "anything"'없이 작동 할 것입니다. – Amadan

관련 문제