파이썬 문자열 리터럴 앞에 'b' 문자가 하는 역할

2024-05-21

파이썬 문자열 리터럴 앞에 'b' 문자가 하는 역할

바이트 문자열은 다음과 같은 경우에 유용합니다.

  • 파일 처리: 파일은 일반적으로 바이트 시퀀스로 저장되므로, 바이트 문자열을 사용하여 파일 내용을 읽고 쓰는 것이 더 효율적입니다.
  • 네트워크 프로그래밍: 네트워크를 통해 전송되는 데이터는 일반적으로 바이트 시퀀스로 표현되므로, 바이트 문자열을 사용하여 네트워크 데이터를 처리하는 것이 더 편리합니다.
  • 바이너리 데이터 처리: 이미지, 음악, 압축 파일과 같은 바이너리 데이터는 일반적으로 바이트 시퀀스로 구성되므로, 바이트 문자열을 사용하여 이러한 데이터를 처리하는 것이 필수적입니다.

바이트 문자열 vs. 일반 문자열

특징바이트 문자열일반 문자열
데이터 형식8비트 바이트 시퀀스유니코드 문자
인코딩ASCII 또는 기타 인코딩 방식유니코드 (기본적으로 UTF-8)
용도파일 처리, 네트워크 프로그래밍, 바이너리 데이터 처리일반 텍스트 처리
표기법'b' 문자열 리터럴 접두사 (예: b'Hello')따옴표로 둘러싸인 문자열 리터럴 (예: "Hello")

예시

# 바이트 문자열 만들기
byte_str = b'Hello, World!'

# 일반 문자열 만들기
str1 = "Hello, World!"

# 파일 쓰기
with open('data.txt', 'wb') as f:
    f.write(byte_str)

# 네트워크 소켓에 데이터 전송
sock.sendall(byte_str)

주의 사항:

  • 바이트 문자열에 유니코드 문자를 포함하려면 encode() 함수를 사용하여 명시적으로 인코딩해야 합니다. 예를 들어, b'한글'.encode('utf-8')은 유니코드 바이트 시퀀스를 생성합니다.
  • 일반 문자열을 바이트 문자열로 변환하려면 encode() 함수를 사용해야 합니다. 예를 들어, "한글".encode('utf-8')은 유니코드 바이트 시퀀스를 생성합니다.
  • 바이트 문자열을 일반 문자열로 변환하려면 decode() 함수를 사용해야 합니다. 예를 들어, b'\한글'.decode('utf-8')은 "한글" 문자열을 생성합니다.



예제 코드: 파이썬에서 바이트 문자열 사용

파일 읽기 및 쓰기

이 예에서는 b'Hello, World!' 바이트 문자열을 data.txt 파일에 쓰고, 그 후 파일에 저장된 내용을 읽어 출력합니다.

# 바이트 문자열 만들기
byte_str = b'Hello, World!'

# 파일 쓰기
with open('data.txt', 'wb') as f:
    f.write(byte_str)

# 파일 읽기
with open('data.txt', 'rb') as f:
    data = f.read()
    print(data)

네트워크 소켓에 데이터 전송

이 예에서는 b'Hello, World!' 바이트 문자열을 네트워크 소켓을 통해 전송합니다.

import socket

# 소켓 연결
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 8000))

# 바이트 문자열 전송
sock.sendall(b'Hello, World!')

# 소켓 닫기
sock.close()

바이너리 데이터 처리

이 예에서는 b'\x41\x42\x43' 바이트 시퀀스를 문자열로 변환하고, 다시 바이트 시퀀스로 변환합니다.

# 바이트 문자열 만들기
byte_str = b'\x41\x42\x43'

# 바이트 문자열을 문자열로 변환
text = byte_str.decode('ascii')
print(text)  # 출력: ABC

# 문자열을 바이트 문자열로 변환
new_byte_str = text.encode('ascii')
print(new_byte_str)  # 출력: b'ABC'



파이썬에서 바이트 문자열을 만드는 대체 방법

encode() 함수 사용:

일반 문자열을 encode() 함수를 사용하여 바이트 문자열로 변환할 수 있습니다. 인코딩 방식을 명시적으로 지정하려면 encode() 함수에 인코딩 매개 변수를 전달할 수 있습니다. 예를 들어, 다음 코드는 "안녕하세요" 문자열을 UTF-8 바이트 문자열로 변환합니다.

text = "안녕하세요"
byte_str = text.encode('utf-8')
print(byte_str)  # 출력: b'\안녕하세요'

bytes() 내장 함수를 사용하여 바이트 시퀀스를 직접 생성할 수 있습니다. 예를 들어, 다음 코드는 ASCII 코드 65, 66, 67에 해당하는 바이트 문자열을 만듭니다.

byte_str = bytes([65, 66, 67])
print(byte_str)  # 출력: b'ABC'

fromhex() 함수 사용:

16진수 문자열을 바이트 문자열로 변환하려면 fromhex() 함수를 사용할 수 있습니다. 예를 들어, 다음 코드는 "414243" 16진수 문자열을 바이트 문자열로 변환합니다.

hex_str = "414243"
byte_str = bytes.fromhex(hex_str)
print(byte_str)  # 출력: b'ABC'

문자열 슬라이싱 사용:

바이트 문자열의 일부를 추출하려면 문자열 슬라이싱을 사용할 수 있습니다. 예를 들어, 다음 코드는 "안녕하세요" 문자열의 처음 3개 바이트를 추출합니다.

text = "안녕하세요"
byte_str = text[0:3].encode('utf-8')
print(byte_str)  # 출력: b'\안녕'

사용 시나리오에 따른 선택:

  • 'b' 문자열 리터럴: 간단하고 명확한 경우에 사용하기 좋습니다.
  • encode() 함수: 특정 인코딩 방식을 사용해야 하는 경우에 사용합니다.
  • bytes() 내장 함수: 바이트 시퀀스를 직접 생성해야 하는 경우에 사용합니다.
  • fromhex() 함수: 16진수 문자열을 바이트 문자열로 변환해야 하는 경우에 사용합니다.
  • 문자열 슬라이싱: 바이트 문자열의 일부를 추출해야 하는 경우에 사용합니다.

python string unicode


for 루프, np.apply_along_axis(), vectorize() 함수 활용

astype() 메서드를 사용하면 배열의 데이터 타입을 변경할 수 있습니다. 2D float 배열을 2D int 배열로 변환하려면 다음과 같이 astype() 메서드를 사용할 수 있습니다.이 코드는 다음과 같은 출력을 생성합니다...


행렬-벡터 곱셈: NumPy vs. 리스트 내포 vs. for 루프

행렬-벡터 곱셈은 행렬과 벡터를 곱하여 다른 벡터를 생성하는 연산입니다. 행렬의 행의 개수가 벡터의 원소 개수와 같아야만 행렬-벡터 곱셈을 수행할 수 있습니다.NumPy에서 행렬-벡터 곱셈을 수행하는 방법에는 두 가지가 있습니다...


Django ORM에서 select_related와 prefetch_related의 차이점

Django ORM은 데이터베이스와 상호 작용하는 데 사용되는 강력한 도구입니다. select_related와 prefetch_related는 쿼리 성능을 최적화하는 데 사용되는 두 가지 중요한 기능입니다. 두 기능 모두 관련된 데이터를 가져오는 데 사용되지만 서로 다른 방식으로 작동하며 장단점이 있습니다...


PyTorch에서 GPU 사용하지 않도록 설정하는 방법

사용 가능한 GPU가 없는 경우디버깅을 위해 모델을 느리게 실행해야 하는 경우GPU 사용으로 인해 발생하는 메모리 문제를 해결해야 하는 경우PyTorch에서 GPU 사용을 비활성화하는 방법은 여러 가지가 있습니다.이 코드는 torch...


PyTorch에서 적응형 풀링 작동 방식

적응형 풀링은 다음 두 단계로 작동합니다.입력 텐서 크기 조정: 최대 풀링: 입력 텐서의 각 채널에서 최대값을 찾아 출력 텐서를 채웁니다. 평균 풀링: 입력 텐서의 각 채널에서 평균값을 계산하여 출력 텐서를 채웁니다...


python string unicode