파이썬 문자열 앞의 ab 접두사는 무엇을 의미합니까?


107

파이썬 소스 코드에서 나는 다음과 같은 문자열 앞에 작은 b 를 본 것을 우연히 발견 했습니다.

b"abcdef"

u유니 코드 문자열을 나타내는 r접두사 와 원시 문자열 리터럴 의 접두사에 대해 알고 있습니다.

뭐라고 않습니다 b및 종류의 소스 코드의있는 스탠드 접두어가없는 일반 문자열처럼 정확하게 것으로 보인다 유용하다?


10
@SLott : 제공 한 링크를 따라 가면 b 접두사가 문자열 접두사에 허용 되지 않습니다 ... 2.6의 경우 (참조 자료의 사소한 오류처럼 보입니다). 그리고 이런 종류의 인터넷 검색은 쉽지 않습니다. "b python string prefix"와 같은 키워드를 시도했지만 기본적으로 아무데도 없었습니다.
kriss

사용 된 링크 S.Lott에 버전 지정자가 없습니다. 이것은 Python 3에 관한 것입니다 : docs.python.org/3/reference/… . 접두사는 이제 Python 2.6 이상 에서도 지원되어 교차 버전 Python 코드를 용이하게합니다.
Martijn Pieters

1
이 질문은 "정확한 중복"도 아니고 "인쇄 문에서이 'b'문자를 제거 할 수 있습니까?"라는 질문에 대한 대답이 아닙니다. stackoverflow.com/questions/42599851/… 마리 진에게 표시를 해제 해 주시겠습니까? 질문 한 사람과 실제로 답변을 시도한 사람은 실제 질문에 대한 답변을 할 수 있다는 점에 감사 할 것입니다.
me_

답변:


62

이것은 Python3 bytes 리터럴 입니다. 이 접두사는 Python 2.5 및 이전 버전에는 없습니다 (일반 문자열 2.x에 해당하는 반면 일반 문자열 3.x는 u접두어 2.x 에있는 리터럴에 해당 ). Python 2.6 이상에서는 3.x와의 호환성을 위해 일반 문자열과 동일합니다 .


@WRAR : python 2.6 코드에 있었는데 python2.6에 도입 된 것 같습니다
kriss

게시하기 전에 2.6 참조에서 구체적으로 확인했습니다. docs.python.org/reference/lexical_analysis.html#literals
wRAR

1
OK, "향후 호환성을 위해 Python 2.6은 str 유형의 동의어로 바이트를 추가하고"What 's new "에서 b ''표기법도 지원합니다."
wRAR

위의 링크는 이제 2.7 참조를 가리키고 b 접두사가 추가 되었으므로
kriss

98

b접두사는 의미 bytes문자열 리터럴을 .

Python 3 소스 코드에서 사용되는 경우 표현식은 일반 유니 코드 객체가 아닌 bytes객체를 생성 합니다 . Python 셸에서 또는 목록, dict 또는 기타 컨테이너 콘텐츠의 일부로 에코되는 경우이 표기법을 사용하여 표현 된 객체 를 볼 수 있습니다 .strbytes

bytes객체는 기본적으로 0-255 범위의 정수 시퀀스를 포함하지만, 표시 될 때 Python 은이 바이트를 ASCII 코드 포인트 로 표시 하여 내용을 더 쉽게 읽을 수 있도록합니다. 외부 모든 바이트 인쇄 가능한 ASCII 문자의 범위는 이스케이프 시퀀스 (예 :로 표시됩니다 \n, \x82등). 반대로 ASCII 문자와 이스케이프 시퀀스를 모두 사용하여 바이트 값을 정의 할 수 있습니다. ASCII 값의 경우 숫자 값이 사용됩니다 (예 : b'A'== b'\x41').

bytes객체는 정수 시퀀스로 구성 되기 때문에 bytes목록과 같이 0-255 범위의 값을 가진 다른 정수 시퀀스에서 객체를 생성 할 수 있습니다 .

bytes([72, 101, 108, 108, 111])

및 인덱싱은 정수를 다시 제공합니다 (그러나 슬라이스가 새로운 생산 bytes값을, 위의 예를 들어, value[0]당신을 제공 72하지만, value[:1]이다 b'H'(72)는 대문자의 ASCII 코드 포인트이기 때문에 H가 ).

bytes인코딩 된 텍스트를 포함한 모델 이진 데이터 . 값에 텍스트가 포함되어 있으면 먼저 올바른 코덱을 사용하여 디코딩해야합니다. 예를 들어 데이터가 UTF-8로 인코딩 된 경우 다음을 사용하여 유니 코드 값을 얻을 수 있습니다 .bytesstr

strvalue = bytesvalue.decode('utf-8')

반대로, 텍스트에서 이동 str에 객체 bytes당신이 필요로 인코딩 . 사용할 인코딩을 결정해야합니다. 기본값은 UTF-8을 사용하는 것이지만 필요한 것은 사용 사례에 따라 크게 달라집니다.

bytesvalue = strvalue.encode('utf-8')

생성자를 사용 bytes(strvalue, encoding)하여 동일한 작업을 수행 할 수도 있습니다 .

디코딩 및 인코딩 방법은 모두 오류 처리 방법지정 하기 위해 추가 인수를 사용합니다 .

Python 2, 버전 2.6 및 2.7은 또한 b'..'문자열 리터럴 구문을 사용하여 문자열 리터럴 생성을 지원하여 Python 2와 3 모두에서 작동하는 코드를 쉽게 만듭니다.

bytes객체는 str문자열 처럼 불변 입니다. 가변 바이트 값이 필요한 경우 bytearray()객체를 사용하십시오 .

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