본문 바로가기
컴퓨터관련/Python

python에서의 bytes형(바이트형)

by 빛과 어둠사이 2020. 12. 8.
728x90
반응형
SMALL

오늘은 파이썬에서의 바이트형에 대해서

정리를 해보려고 합니다.

 

저는 얼마 전에 DB에 암호화 되어있는 값을

복호화해서 가져오도록 해보았습니다.

그랬더니 해당 값에 b가 붙더라고요.

b'0000000' 이런 식으로 되는 것을 확인할 수 있었습니다.

그래서 저게 무엇인가 하다가

바이트형이라는 표시라는 것을 알게되었고

그래서 공부를 해서 정리를 해보는 것입니다.

 

 

1. bytes

보통 bytes형은 1바이튿 단위의 값을 저장하는 것입니다.

영어 한글자는 1바이트이고

숫자도 1바이트

한글은 보통 2바이트입니다.

 

요즘은 영어도 2바이트를 쓴다는거 같기도 한데

제가 배울 때는 영어는 1바이트를 썼었습니다.

 

 

2. bytes 객체 만들기

이번에는 바이트형 객체를 만들어 보도록 하겠습니다.

바이트형 객체를 만들 때는 bytes를 보통 사용합니다.

 

2-1. bytes(길이)

위처럼 선언을 하게 된다면

지정한 길이만큼을 0으로 채워서

바이트형 객체를 생성합니다.

2-2. bytes(리스트)

위처럼 리스트를 넣어서 객체를 생성하게 된다면

해당 리스트를 저장하고 있는 

바이트객체를 생성하게 됩니다.

2-3. bytes(b'문자열')

위처럼 앞에 b를 붙이고

문자열을 입력하게 된다면

바이트형으로 해서 문자열을 입력하게 되는 것입니다.

 

위 방식들을 이용해서

bytes형 객체를 생성해보도록 하겠습니다.

 

print(bytes(5))
print(bytes([10,20,30]))
print(bytes(b'test'))

 

위처럼 소스를 작성하였습니다.

위에 설명했던 것처럼

바이트형 객체를 생성해서

바로 값이 어떻게 들어가있는지

보는 것입니다.

 

 

위처럼 소스를 작성하였고

실행을 하게 되면

결과는 다음과 같이 나오게 됩니다.

 

 

위처럼 값이 저장되어 있는 것을

확인할 수 있습니다.

 

 

 

3. bytearray 형

이번에는 bytearray형에 대해서 정리를 해보도록 하겠습니다.

bytearray도 bytes와 마찬가지로

1바이트 단위의 값을 저장하는 자료형입니다.

다만, bytes와 다르게

bytearray의 경우에는 값의 수정이 가능합니다.

이것이 다른 점 입니다.

 

 

즉, bytes는 값의 수정이 안됩니다.

하지만, bytearray의 경우에는

값의 수정이 가능합니다.

 

3-1. bytearray()

빈 바이트 배열 객체를 생성합니다.

3-2. bytearray(길이)

해당 길이만큼 0으로 채운

byte형 배열을 생성합니다.

3-3. bytearray(리스트)

전달받은 리스트를 바이트배열로 만들어서

객체를 생성합니다.

3-4. bytearray(b'문자열')

문자열을 바이트배열 객체로 생성해줍니다.

 

위 방법들을 가지고

객체를 생성해 보았습니다.

 

print(bytearray())
print(bytearray(5))
print(bytearray([10,20,30]))
print(bytearray(b'test'))

 

저는 위와 같이 소스를 작성하였습니다.

그냥 bytearrary형으로 객체를 생성해서

값을 화면에 출력해준 것입니다.

 

 

 

위와 같이 소스를 작성하였습니다.

그리고 실행을 하면

결과는 아래와 같이 나와집니다.

 

 

위처럼 나와지는 것을

확인할 수 있었습니다.

 

 

 

그러면 이번에는 bytes와 다른 점이라는

값의 변경을 해보도록 하겠습니다.

 

bytearr = bytearray(b'testSample')
print(bytearr)
bytearr[0] = ord('a')
print(bytearr)

 

저는 위와 같이 코딩을 하였습니다.

우선 bytearray형으로 해서 testSample라는 값을 넣었습니다.

그리고 값을 확인하였습니다.

그 이후 ord라는 함수를 이용하여 첫번째 값을 a라는 값으로

대체를 하였습니다.

ord는 해당 문자의 아스키값을 가지고 와서

리턴해주는 것입니다.

즉, a 의 아스키코드값을 가지고 와서

해당 값을 저장하는 것입니다.

그리고 다시 출력을 해본 것입니다.

 

 

 

위와 같이 코딩을 하였고

실행을 하면

결과는 다음과 같이 나오게 됩니다.

 

 

위처럼 testSample라고 저장이 되어 있다가

첫번째 글자가 a로 바뀐

aestSample로 변경이 된 것을

확인할 수 있습니다.

 

 

 

 

4. 인코딩과 디코딩

이번에는 바이트형 문자를 디코딩하고

String형 문자열을 bytes형으로 인코딩하는 방법을

정리해보도록 하겠습니다.

 

 

4-1. encode

이번에는 인코딩 하는 방법을 정리해보도록 하겠습니다.

인코딩은 String형 문자를 bytes형으로

변환하는 것입니다.

 

이렇게 인코딩 할 때는

encode() 함수를 이용하면 됩니다.

문자열 뒤에 .encode() 를 붙여주면 됩니다.

 

print('test'.encode())

 

위처럼 해주면 되는 것입니다.

그러면 test라는 문자열이

바이트형으로 인코딩 되는 것입니다.

 

 

위와 같이 하고 실행을 하게 되면

결과는 다음과 같이 나오게 됩니다.

 

 

위처럼 나와지는 것을

확인할 수 있습니다.

 

 

 

그리고 인코딩을 할 때,

특정 캐릭터셋을 지정할 수 있습니다.

charset값을 () 안에 넣어주시면 되십니다.

 

print('테스트'.encode('euc-kr'))
print('테스트'.encode('utf-8'))

 

저는 위와 같이 소스를 작성하였습니다.

bytes로 할 때,

영어는 그대로 나오기 때문에

한글로 해서 넣어보았습니다.

 

 

위와 같이 하였고

실행을 하면

결과는 아래와 같이 나와집니다.

 

위처럼 나와지는 것을

확인할 수 있습니다.

캐릭터셋에 따라서

값이 다르게 저장이 되는 것을

확인할 수 있습니다.

 

 

 

4-2. decode

이번에는 디코딩 하는 것을

정리해보도록 하겠습니다.

 

인코딩은 문자열을 bytes형으로 하는 것이면

디코딩은 bytes형을 string형 등

다른 값으로 돌리는 것입니다.

 

 

인코딩 때와 마찬가지로

디코딩 때도 디코딩 함수를 넣어주시면 되십니다.

decode() 함수를 이용하면 됩니다.

 

 

testStr = b'test'
print(testStr)
print(testStr.decode())

 

저는 위와 같이 소스를 작성하였습니다.

testStr이라는 변수에

bytes형 값을 넣고

출력을 해본 것입니다.

 

위와 같이 소스를 작성하였고

실행을 하면

결과는 아래와 같이 나오게 됩니다.

 

 

위에는 바이트형이라는 의미로

b가 붙어서 나와졌고,

아래는 b가 없이 나와진 것을

확인할 수 있습니다.

 

 

decode 또한,

charset을 지정할 수 있습니다.

encode와 마찬가지로 

직접 지정을 해주시면 되십니다.

decode(형식) 이런 식으로 해주시면 되십니다.

 

testStr = '테스트'.encode('utf-8')
print(testStr)
print(testStr.decode())
print(testStr.decode('euc-kr'))
print(testStr.decode('utf-8'))

 

위처럼 코딩을 하였습니다.

테스트라는 문자를 utf-8로 해서

인코딩하였습니다.

그리고 디코딩을 해 본 것입니다.

 

자체적으로 디코딩도 하고,

캐릭터셋을 강제로 지정도 해보았습니다.

그리고 일부러 다른 캐릭터셋을 지정해보기도 했습니다.

 

 

 

위처럼 소스를 작성하였고

실행을 하면

결과는 아래처럼 나오게 됩니다.

 

 

 

위처럼 에러가 발생이 되네요.

캐릭터셋이 다르게 디코딩을 하려고 하니

오류가 발생이 되었습니다.

 

이로써, 캐릭터셋을 잘못 지정하게 된다면

오류가 발생되는 것을 알 수 있었습니다.

그러면 저렇게 잘못 지정시킨 부분을

주석처리하고 다시 진행해보도록 하겠습니다.

 

testStr = '테스트'.encode('utf-8')
print(testStr)
print(testStr.decode())
#print(testStr.decode('euc-kr'))
print(testStr.decode('utf-8'))

 

위와 같이 소스를 작성하였습니다.

utf-8로 인코딩하였기 때문에

디코딩 할 때, euc-kr을 빼고

디코딩을 하였습니다.

 

 

 

위와 같이 소스를 작성하였고

실행을 하면

결과는 아래와 같이 나오는 것을

확인할 수 있습니다.

 

 

위처럼 정상적으로 디코딩되어서

나와지는 것을 확인할 수 있었습니다.

 

 

 

 

오늘은 python에서의 bytes형에 대해서

정리를 해보았습니다.

저는 개인적으로 바이트형을 별로 사용을 하지는 않습니다.

하지만 위에 얘기한 것처럼

자동으로 bytes형으로 지정이 되는 경우가 발생할 수 있습니다.

그리고 수동으로도 지정을 해줘야 하는 경우가 있을 수 있습니다.

그렇기 때문에 알고 있으면

나쁘지 않을 것 같네요.

 

 

 

이상으로 파이썬에서의

바이트형에 대해서 정리를 하였고,

인코딩, 디코딩 하는 방법도 정리를 해보았습니다~

 

 

 

 

 

 

 

 

혼자 공부하는 파이썬:파이썬 최신 버전 반영

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음

 

 

 

728x90
반응형
LIST