2017-12-10 6 views
0

을 반환하지 않습니다 파일에서. 그러나 마지막 줄에 새 줄 기호가 포함되어 있지 않으면 마지막 줄 앞에 하나씩 끝납니다. Windows 환경에서 스크립트를 실행하고 파이썬 3.6을 사용합니다. 첫 번째 경우 예를 들어 파일의 경우파일 반복자는 내가 파이썬에 새로운 그리고 난 파일을 읽고 출력에 인쇄하는 간단한 스크립트가 마지막 줄

:

Some text here 
Some here 

그러나 마지막 줄이 포함 된 경우 새로운 라인 심볼의 출력은 다음과 같습니다 :

Some text here 
Some here 

and here 

그리고 스크립트의 출력은

Some text here 
Some here 

and here 

내가 내가 잘못 했니?

+1

재생할 수 없습니다. 어쨌든 코드를 단순화 할 수 있습니다. 'open ('somefile.txt', mode = 'rt', encoding = 'utf-8')'은'open '에 대한 디폴트 값인'rt'와 인코딩'utf- ('somefile.txt')'. 또한 파일을 수동으로 열고 닫는 대신'with' 절을 사용하는 것이 좋습니다. 마지막으로'print' 만 할 수 있다면 왜 수동으로'sys.stdout'에 쓰는가? – DeepSpace

+5

프로그램이 실행 중입니까? 'sys.stdout'은 버퍼 된 라인이므로 루프가 끝난 후에'sys.stdout.flush()'를 추가하여 버퍼에 아무것도 갇혀 있지 않은지 확인해보십시오. – ShadowRanger

+1

* [ "개행 문자 (\ n)는 문자열의 끝에 있으며 파일이 개행 문자로 끝나지 않으면 파일의 마지막 줄에서 생략됩니다]"] (https : // docs. python.org/3/tutorial/inputoutput.html) <- 마지막 줄은 항상 새로운 줄의 유무와 상관없이 읽혀집니다. – danihp

답변

-1

버퍼가 비어 있도록하려면 루프가 완료된 후 sys.stdout.flush()을 추가하여 비어 있는지 확인하십시오 (sys.stdout은 줄 버퍼이므로).

+0

이것은 파일에 아무런 영향을 미치지 않습니다. 가능한 한 가장 비효율적 인 방법으로 여러 문자열을 연결하고 파일을 닫지 않았습니다. 파일의 전체 내용을 가져 오려면'read' 메소드가 있습니다. OP 문제는 개행 문자가없는 경우 파일이 완전히 읽히지 않는 것입니다. –

+0

이제 답을 완전히 바꿨지만, 여전히 이것이 올바른 방법이라고 생각하지 않습니다. –