비트와 바이트
•
bit
◦
컴퓨터에서 사용하는 가장 작은 데이터 단위, 하나의 비트는 2진수 1 또는 0으로 표현되어 데이터를 처리, 저장, 전송할 때 사용
•
byte
◦
데이터 파일의 크기, 디스크 또는 그 외 저장 매체의 공간, 그리고 네트워크를 통하여 전송되는 데이터의 양을 표현하는데 사용
(1바이트는 8비트와 같다.)
ASCII(아스키 코드)
•
최초 인코딩
•
128개 문자 조합 제공
•
7비트 부호 (1비트는 통신 에러 검출용)
ord('한')
# 54620
chr(54620)
# 한
Python
복사
Unicode(유니 코드)
•
각 나라별 언어를 모두 표현하기 위해 나온 코드 체계
•
UTF-8 (가변길이 인코딩)
•
문자마다 고유한 코드 값 제공
Nuicode Normalization(유니코드 정규화)
•
파이썬으로 텍스트 전처리를 하다가 정규식으로 한글 영어만 추출할 때, 가끔 데이터가 None이 되는 경우가 많이 발생
•
그런 경우에는 대부분 같은 문자이지만 `아스키 코드가 달라서` 발생하는 문제들
•
이런 이슈(오류)들을 피하기 위해서 유니코드 정규화를 해야 한다.
유니코드 함수
•
normalize()
◦
NFC(Normal From Composed)
▪
구성된 문자 반환 : 조합형
◦
NFD(Normal Form Decomposed)
▪
분해, 결합된 문자 제공 : 완성형
•
unicodedata.category(chr):
◦
chr 문자에 할당된 일반 범주(general category)를 문자열로 반환합니다.
◦
`Mn`: Mark, no spacing(발음구별기호)
◦
`LI`: Letter, lower case
◦
`Lu`: Letter, upper case
인코딩
•
문자열을 바이트코드로 변환하는 과정
•
유니코드를 utf-8, euc-kr, ascii 형식의 byte 코드로 변환하는 것
korean_str = '한글'
encoded = korean_str.encode('utf-8')
encoded
Python
복사
디코딩
•
바이트코드를 문자열로 변환하는 과정
korean_str = b'\xed\x95\x9c\xea\xb8\x80'
decoded = korean_str.decode('utf-8')
decoded
Python
복사
base64
•
바이너리 데이터를 ASCII문자만으로 표현하기 위해 만들어진 인코딩 방법
import base64
# 인코딩
str = '안녕?'
bytes = str.encode('UTF-8')
result = base64.b64encode(bytes)
result_str = result.decode('ascii')
print(result_str)
# 디코딩
code = '7JWI64WVPw=='
code_bytes = code.encode('ascii')
decoded = base64.b64decode(code_bytes)
str = decoded.decode('UTF-8')
print(str)
Python
복사
URL 인코딩/디코딩
from urllib import parse
nave_str = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94"
decoding_url = parse.unquote(nave_str)
decoding_url
# 'https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=안녕하세요'
incoding_url = parse.quote(decoding_url)
incoding_url
# 'https%3A//search.naver.com/search.naver%3Fwhere%3Dnexearch%26sm%3Dtop_hty%26fbm%3D1%26ie%3Dutf8%26query%3D%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94'
Python
복사
정규표현식
•
복잡한 문자열을 처리할 때 사용하는 기법
정규표현식 문법
•
메타 문자
> . ^ $ * + ? { } [ ] \ | ( )
◦
정규 표현식에서 사용하는 메타 문자
◦
원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자
•
문자 클래스 []
◦
문자 클래스를 만드는 메타 문자인 `[]` 사이에는 어떤 문자도 들어갈 수 있다.
◦
`[]`안의 두 문자 사이에 하이픈(-)을 사용하면, 두 문자 사이의 범위(from - to)를 의미
(`^`은 not을 의미)
◦
`[a-zA-Z]`: 알파벳 모두
◦
`[0-9]`: 숫자
◦
`[^0-9]`: 숫자가 아닌 문자
import re
txt = "a1b2c3d4e5"
pat = re.compile("[a-zA-Z]")
pat.findall(txt)
Python
복사
Dot(.)
◦
정규 표현식의 Dot(.) 메타 문자는 줄바꿈 문자인 \\n을 제외한 모든 문자와 매치됨을 의미
◦
정규식을 작성할 때, re.DOTALL 옵션을 주면 `\n` 문자도 매치
반복(*)
◦
와일드카드
◦
* 바로 앞에 있는 문자 a가 0부터 무한대로 반복될 수 있다는 의미
반복(+)
◦
+는 최소 1번 이상 반복될 때 사용
◦
0번일땐 에러
반복({m,n},?)
◦
m번 만큼 반복 횟수 고정