Python을 사용하는이 코드에서 'wb'는 무엇을 의미합니까?


107

암호:

file('pinax/media/a.jpg', 'wb')

또한 당신은 사용하는 것이 좋습니다 open대신 file. filePython 2에서 더 이상 사용되지 않으며 (어떤 버전을 찾을 수 없음) py3k에서 제거되었습니다. (Scott에게 감사합니다) 자세한 내용은 이 질문 을 참조하십시오.
Luiz Damim

1
사용 open대신 file파이썬 3 참조 파이썬 2에서 사용되지 않으며 제거하고, stackoverflow.com/questions/112970/...
최대 Ghenis

2
특히 질문의 특성을 고려할 때 OP 자체 코드라고 가정하는 것은 실제로 공정하지 않습니다. 한때 분명히 유효했습니다.
mckenzm

답변:


112

파일 모드 , 쓰기 및 바이너리. .jpg 파일을 작성하고 있으므로 괜찮아 보입니다.

하지만 jpg 파일을 읽으려면 'rb'

더 많은 정보

Windows에서 모드에 'b'가 추가되면 바이너리 모드로 파일이 열리므로 'rb', 'wb'및 'r + b'와 같은 모드도 있습니다. Windows의 Python은 텍스트와 바이너리 파일을 구분합니다. 텍스트 파일의 줄 끝 문자는 데이터를 읽거나 쓸 때 자동으로 약간 변경됩니다. 파일 데이터에 대한 이러한 비하인드 수정은 ASCII 텍스트 파일에 적합하지만 JPEG 또는 EXE 파일과 같은 바이너리 데이터를 손상시킵니다.


4
구체적으로 Windows에서 텍스트 모드로 열린 파일의 경우 fd.write("foo\n")실제로 디스크에 씁니다 foo\r\n(참고 \r).
Serge Ballesta 2014 년

4
나는 'b'가 Windows뿐만 아니라 모든 플랫폼에서 바이너리 모드로 파일을 열거 나 여기에도 엄청난 경고가있을 것이라고 확신합니다.
mckenzm

76

wb파일이 바이너리 모드로 쓰기 위해 열을 나타냅니다.

바이너리 모드로 쓸 때 Python은 파일에 기록 될 때 데이터를 변경하지 않습니다. 그러나 텍스트 모드에서 ( b가 그냥 제외 w되거나를 사용하여 텍스트 모드를 지정할 때 wt) Python은 기본 텍스트 인코딩을 기반으로 텍스트를 인코딩합니다. 또한 Python은 줄 끝 ( \n)을 플랫폼 별 줄 끝으로 변환 하여 exe또는 png파일 과 같은 바이너리 파일을 손상 시킵니다.

따라서 텍스트 파일을 작성할 때는 텍스트 모드를 사용해야하며 (일반 텍스트 또는 CSV와 같은 텍스트 기반 형식을 사용하든) 이미지와 같은 텍스트가 아닌 파일을 작성할 때는 이진 모드를 사용해야합니다.

참조 :

https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files https://docs.python.org/3/library/functions.html#open


1
이것은 시간이 지남에 따라 변경되었을 수 있습니다. Python 3.6.8을 실행하는 Ubuntu 18.04에서는 '바이너리 모드'가 확실히 중요했습니다. wb옵션 으로 열린 텍스트 파일 (CSV 형식, 궁극적으로 그다지 중요하지 않음)에 쓰려고하는 중에 오류가 발생했습니다 . w대신 옵션 을 사용하여 제대로 작동하도록 할 수있었습니다.
TheDavidJohnson

1
@TheDavidJohnson의 의견에 감사드립니다. Python 2.6에서 문서는 b모드가 Windows에만 영향을 미친 다고 말했습니다 . 이제 문서에서 제거되었으며 바이너리 모드는 "텍스트를 포함하지 않는 모든 파일에 사용되어야합니다".
Daniel G

1
물론 이죠, @ 다니엘! 솔루션을 게시 해 주셔서 감사합니다. 9 년이 지난 후에도 여전히 도움이됩니다. 얼마나 좋습니까? 어쨌든 나 같은 다른 사람들에게 도움이 될만한 새로운 정보를 추가하고 싶었습니다. 건배!
TheDavidJohnson

훌륭한 설명입니다. 그러나 한 가지 설명은 "텍스트 파일을 작성할 때 텍스트 모드를 사용해야합니다"라고 말합니다 . 완전성을 위해 "Python은 [바이너리 모드에서] 변경 사항이 없습니다"라는 이전 의견을 다시 참조하고 인코딩이 무엇인지 모르거나 신경 쓰지 않을 때 텍스트 파일에 이진 모드를 사용할 것이라고 추가합니다. 그러나 바이트를 읽거나 쓰거나 플랫폼에 관계없이 줄 끝을 유지하려는 경우에만 필요합니다.
pcdev

8

이것이 파일을 여는 모드입니다. "wb"는 파일 (w)에 쓰고 있고 바이너리 모드 (b)로 쓰고 있음을 의미합니다.

자세한 내용은 문서를 확인하세요 : clicky

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.