파이썬 문자열 리터럴 앞에 'b' 문자가 하는 역할
파이썬 문자열 리터럴 앞에 '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')
은 유니코드 바이트 시퀀스를 생성합니다.
예제 코드: 파이썬에서 바이트 문자열 사용
파일 읽기 및 쓰기
이 예에서는 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() 내장 함수 사용:
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