파이썬에서 특정 문자를 다른 문자로 바꾸는 함수가 몇 개 있습니다. replace 함수도 그 중 하나입니다만, 이 글에서는 translate 함수와 maketrans 함수를 알아보겠습니다.
파이썬 translate 함수
먼저 translate 함수는 문자를 변환하는 테이블이 주어지면, 문자열을 변환 테이블에 맞춰, 변환하는 함수입니다. 이 함수는 변환 테이블을 1번째 인자로 받게 됩니다.
설명을 읽어보면 문자열에 있는 각각의 문자를, Replace 한다고 되어 있습니다. translation table이 주어진다면. 예를 들자면, 아래와 같은 테이블이 주어졌다고 해 보겠습니다.
이 테이블은, ‘a’를 ‘A’로, ‘b’를 ‘B’로 translate 하는 table입니다. 문자열이 아래와 같이 주어졌다고 해 보겠습니다.
‘a’는 1번째 위치에, ‘b’는 3번째 위치에 있습니다. ‘a’는 ‘A’로, ‘b’는 ‘B’로 바꾸라고 했지요? translate 테이블에 따르면 그렇습니다. 따라서, 문자열 “acb”를 그림 2의 table로 translate를 하면 아래와 같이 바뀌게 됩니다.
여기까지 정리해 봅시다. 파이썬 translate 함수는
- 특정한 문자를 어떤 문자로 바꿀 것인지 translate 테이블을 정의하면
- 문자열에 나오는 특정 문자를 다른 것으로 바꾸는 작업
을 하게 됩니다. 예를 들어 ‘a’를 ‘A’로, ‘b’를 ‘!’로 바꾸는 등, 매핑 관계가 여러 개일 때 쓰면 좋습니다.
파이썬 maketrans 함수
그런데 이 테이블을 어떻게 만들까요? translate는 단순히 번역을 해 주는 함수입니다. 해당 테이블을 만들기 위해서는, maketrans 함수를 써야 해요. 몇 가지 예제를 보겠습니다.
maketrans 함수에 mapping 관계를 넣습니다. dict를 넣었는데요.
- key는 원래 문자
- value는 번역될 문자
를 의미합니다. 저 의미는 ‘a’는 ‘A’로 번역되어야 하고, ‘b’는 ‘B’로 번역되어야 한다는 것이지요. 즉, 그림 2에서 보였던 테이블을 2번째 줄에서 만들게 됩니다. 이제 이 번역 테이블을 바탕으로 “abcd ab”를 번역을 합니다. ‘a’는 ‘A’로, ‘b’는 ‘B’로 번역되게 됩니다.
따라서, 결과는 “ABcd AB”가 나오게 됩니다. 그런데 특정 문자를 문자열로부터 없애고 싶을 수도 있어요. 이 때는 어떻게 하면 좋을까요?
이 때에는 None을 넘겨주면 됩니다. 키에 대응되는 값을 None으로 하면 됩니다. ‘a’를 None으로 번역한다는 의미입니다.
- ‘a’라는 문자를 만나면
- 이를 모두 제외합니다.
따라서, “abcd ab”가 translate 되면 “bcd b”가 됩니다.
여기까지 어렵지 않지요? 여기까지 정리해 봅시다.
정리
‘a’를 만나면 ‘A’로, ‘b’를 만나면 ‘B’로 바꿀 거라는 정보 (dict)를 str의 maketrans에 넘겨주면, 번역 테이블을 생성합니다. 이 정보를 바탕으로 translate를 할 수 있습니다.
“ab”를 해당 translate table을 바탕으로 번역하면 “AB”가 됩니다. “abab”를 같은 번역 테이블로 번역하면, “ABAB”가 됩니다. translate의 1번째 인자에는 번역 테이블을 넣었는데, 이를 바탕으로 문자열을 바꾼 셈입니다.