2011-08-16 2 views
3

집에서 PC를 사용하고 직장에서는 Mac을 사용합니다. 나는 파이썬 스크립트 나 출력물에서 줄 바꿈에 문제가 없었지만, 내 상사에게 보낼 때마다 윈도우 줄 바꿈에 대한 분노한 전자 메일을 다시받습니다.' n'을 삽입하라는 메시지가 나타나면 Python for windows에 ' r n'이 삽입됩니까?

가장 최근은 '\ n'을 사용하여 모든 행을 끝내라고 말한 파이썬 스크립트의 출력 이었지만, 더 자세히 살펴보면 (Mac의 경우 맥에서) 각 행이 실제로 끝난 것처럼 보입니다 '\ r \ n'을 (를) 사용하십시오.

어떻게되고 있으며 어떻게 중지합니까? 필자는 집에서 모든 가상 스크립트를 Linux 가상 머신으로 실행했지만, 너무 느리고 까다 롭다는 것을 발견했습니다. 더 간단한 수정이 있었습니까?

답변

9

파일이 텍스트 모드로 열리고 Python이 사용중인 플랫폼 (Windows 사용 \r\n 및 Linux는 \n 만 사용함)에 따라 줄 바꿈을 정규화하기 때문입니다. 이 같은 바이너리 모드로 파일을 열어야합니다 :

f = open("myfile.txt","wb") 

그것은 않습니다 당신은 또한 바이너리 모드를 지정하지 않는 한 파일을 (\r\n\n로 대체됩니다) 읽어 역에서 같은 일 :

f = open("myfile.txt", "rb") 
+1

'w'로 열어 본 것처럼 계속 텍스트를 쓸 수 있습니까? – Kirt

+2

네, 텍스트 모드와 바이너리 모드의 유일한 차이점은 텍스트 모드가 개행을 표준화한다는 것입니다. –

1

당신이 보는 행동은 파이썬 특정 적이 아닙니다. 이것은 파이썬과 다른 고수준 언어의 기초가되는 C 표준 라이브러리의 버퍼 처리 된 파일 처리 함수에서 비롯된 것입니다. 그렇게하지 않는 한, 작성시 줄 바꿈 문자를 현재 플랫폼의 원시 텍스트 파일 줄 바꿈 시퀀스로 변환하고 읽을 때 역순으로 수행합니다. 자세한 내용은 로컬 시스템의 fopen() 설명서를 참조하십시오. Windows에서는 \ n이 쓰기에 \ n \ n 변환됩니다.

파이썬 문서에는 개행 변환 및 기타 open() 모드 옵션 here이 나와 있습니다.

먼저 출력 파일을 열 때 open("filename", "w") 대신 open("filename", "wb")을 사용하는 것이 해결책입니다. 자동 개행 문자 변환을 피할 수 있습니다. 상사가 유닉스 (OSX 포함)를 사용하고있는 한 상사에게 문제를 해결해야한다. 불행하게도, 그것은 또한 일부 Windows 텍스트 편집기 (? 예를 들어 메모장)이 이상하게 파일을 제시 것을 의미합니다

 
Windows acts like a teletype 
          when it sees new lines 
                without carriage returns. 

윈도우를 사용하지 않는 사람에게 보내기 전에 필요에 따라 또 다른 방법은 파일을 변환하는 것입니다 . 이러한 목적으로 다양한 변환 프로그램 (예 : dos2unixflip)이 있습니다.

관련 문제