파이썬 파일에 바이트 쓰기


143

문자열을 반환하는 함수가 있습니다. 문자열에는 캐리지 리턴과 줄 바꿈 (0x0D, 0x0A)이 포함됩니다. 그러나 파일에 쓸 때 새 줄 바꿈 만 포함됩니다. 캐리지 리턴과 새 줄 바꿈을 포함하도록 출력을 얻는 방법이 있습니까?

msg = function(arg1, arg2, arg3)
f = open('/tmp/output', 'w')
f.write(msg)
f.close()

읽기file.__doc__
wim

답변:


257

바이트를 쓰려면 이진 모드에서 파일을 열어야합니다.

f = open('/tmp/output', 'wb')

8
OP는 Windows 이외의 플랫폼을 사용하는 것으로 보이므로 Py3에서만 작동합니다. Py2에서는을 사용해야 io.open합니다.
lvc

2
파이썬이 런타임에 데이터 유형을 감지 할 수 있고 바이너리와 텍스트 입력을 감지 할 수 있다고 가정하면 이것이 파이썬 자체의 버그라고 생각합니다. 파이썬 자체에서 수정해야한다고 생각합니다. 왜 수백 명의 사람들 이이 페이지에 끝나는가? 파이썬 stdlib의 if 문으로 피할 수 있습니다.
Felipe Valdes

2
불행히도 @FelipeValdes는 콘텐츠가 잘못 감지되면 글을 쓸 때 놀라움을 줄 수 있습니다. 더욱 귀찮게, 그 잘못된 탐지는 놀랍고 추적하기 어려운 특정 이상한 경우에서만 발생할 수 있습니다. 이 질문이 있음을 의미하더라도 명시 적 동작에 의존하면 IO가 다른 시나리오에서 동작하는 방식을 확실하게 보장 할 수 있습니다.
Liam Dawson

1
바이트 파일의 확장명은 무엇입니까?
chia yongkang

@FelipeValdes 최소 놀람 / 놀랍게도의 원칙 ( en.wikipedia.org/wiki/Principle_of_least_astonishment )과 관련이 있습니다. 당신의 방법은 더 적절하게 명명 될 것입니다 :open_and_detect_file_type()
henrycjc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.