Python/Python 모듈탐구

[Python] - 모듈탐구 string과 Formatter - 문자열 자유자재로 다루기

오랜만에 돌아온 모듈 탐구 시간이다. 이번 시간에는 일반 문자열 연산을 조금 더 편리하게 도와주는 string 모듈에 대해서 알아보자

 


제공하는 문자열

1. string.ascii_letters : 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

2. string.ascii_lowercase : 'abcdefghijklmnopqrstuvwxyz'

3. string.ascii_uppercase : 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

4. string.digits : '0123456789'

5. string.hexdigits : '0123456789abcdefABCDEF'

6. string.octdigits :'01234567'

7. string.punctuation : '!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~'

8. string.printable : 출력 가능한 모든 문자열의 조합(ascii_letter + punctuation + digits)

9. string.whitespace : 공백으로 취급되는 모든 문자열(스페이스, 탭, 줄 바꿈, 캐리지 리턴, 세로 탭 및 폼 피드)

 

 

Formatter 클래스

Formatter은 문자열을 리터럴과 치환 필드(중괄호 {})로 표시를 한다. Formatter클래스는 str.format()과 유사하게 사용된다.

 

format 가장 기본적인 사용법은 다음과 같다.

 

>>> "tell me your {}".format("money")
tell me your money

 

 

중괄호 안에는 다음과 같은 문법을 써넣을 수 있으며, 의미는 옆 주석을 확인하면 된다.

"I love {}" ### 일반적인 치환문자{} "I love {0}"와 같은 의미이다.
"I love {} and {}" ### "I lovev {0} and {1}"와 같은 의미이다.
>>> 순서를 지정해줄 수 도 있고, 생략할 수도 있다.

"I have my name {name}" ### 키워드 name으로 지정값을 대입하게 할 수 있다.
"List number 1 is {my_list[0]}" ### my_list의 첫번째 원소값을 대입하게 한다
"Show me your money {0.my_money}" ### 0번째의 원소의 속성값 my_money를 출력하게 한다.
>>> 키워드를 통한 사용도 가능하며 나아가 자료구조의 속성이나 원소를 넣어줄 수 있다.

"I have much fun with {0!s}" ### 0번째 객체의 str()메소드를 호출한다.
"I have much fun with {0!r}" ### 0번째 객체의 repr()메소드를 호출한다.
"I have much fun with {0!a}" ### 0번째 객체의 ascii()메소드를 호출한다.
>>> 객체의 내장함수를 호출할 수 있다.

 

다양한 트릭을 다음처럼 사용할 수 있다.

### Trick 1. 텍스트 정렬
>>> "{:<30}".format("좌로밀착!")
'좌로밀착!                         '

>>> "{:>30}".format("우로밀착!")
'                         우로밀착!'

>>> "{:&^30}".format("가운데정렬!")
'&&&&&&&&&&&&가운데정렬!&&&&&&&&&&&&'


### Trick 2. 진법
>>> my_height = 185

>>> print("키가 어떻게 되세요?")
키가 어떻게 되세요?

>>> "10진수로 : {0:d} 16진수로 : {0:x} 8진수로 : {0:o} 2진수로 {0:b}".format(my_height)
'10진수로 : 185 16진수로 : b9 8진수로 : 271 2진수로 10111001'


### Trick 3. 구분자
>>> money = 100000000
>>> rate = 0.35

>>> "{0:,} {1:.2%}".format(money, rate)
'100,000,000 35.00%'

 

 

Template 클래스

Template 클래스는 대체 문자열 하나를 인자로 생성된다. 사용법이 직관적이니 다음의 코드를 확인하자.

### Template의 사용 ###
>>> my_template=string.Template("$abc is my $hobby")
>>> my_dict = {"abc":"riducto","hobby":"python"}
>>> your_dict = {"abc":"riducto"}

>>> my_template.substitute(my_dict)
'riducto is my python'
>>> my_template.substitute(your_dict)
Traceback (most recent call last):
...
KeyError: 'hobby'
### subsutitube는 템플릿에 지정된 $문자를 키로한 딕셔너리로 치환한다. key가 없을 경우 KeyError Exception

>>> my_template.safe_substitute(your_dict)
'riducto is my $hobby'
### 그런당신을 위해 safe_substitute는 지정문자를 치환에 실패한 경우 내비둔다.

 

* 출처 : docs.python.org/ko/3/library/string.html

 

string — 일반적인 문자열 연산 — Python 3.9.4 문서

string — 일반적인 문자열 연산 소스 코드: Lib/string.py 문자열 상수 이 모듈에 정의된 상수는 다음과 같습니다: string.ascii_letters 아래에 나오는 ascii_lowercase와 ascii_uppercase 상수를 이어붙인 것입니다

docs.python.org


이 정도면 string 모듈에 대해서는 다 설명한 거 같다. 다음 모듈 탐구 시간에 만나도록 하자!