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