Python 문자열 숫자 앞에 0 채우기 4가지 방법

종종 고정간격의 문자열이 필요한 경우가 있습니다. Python 문자열 숫자 앞에 0 채우는 방법을 알아보겠습니다.

Python 문자열 숫자 0 채우기

숫자 앞에 0을 채워서 고정 길이의 문자열을 만들 필요가 있을 때 printf-style 문자열 포맷팅 방식과 str.zfill() 메서드, 빌트인 함수 format(), 그리고 str.format() 메서드를 사용할 수 있습니다.

printf 스타일 문자열 포맷팅

과거 C언어의 printf() 함수에서 사용하던 문자열 포맷팅 방법을 Python에서도 사용할 수 있습니다. 코드를 통해서 살펴보겠습니다.

print("%5d" % 31)
print("%05d" % 31)
print("%05d" % -31)
Python

C언어에서 사용하는 것과 같은 방식으로 숫자를 표현할 수 있습니다.

“%5d”만 사용한 경우에는 숫자가 5칸 기준으로 우측 정렬되며 남는 공간은 스페이스(‘ ‘) 문자로 채워지는 것을 확인할 수 있습니다.

“%05d”라고 했으므로 총 길이는 5칸이며 앞에 0으로 채우고, 숫자값을 갖는다는 것을 알 수 있습니다. 음수의 경우에는 음수 부호가 먼저 채워지고 나머지 공간을 0으로 채웁니다. “%05d” 대신에 “%05i”를 이용해도 됩니다. ‘i’나 ‘d’ 모두 signed integer decimal(부호가 있는 정수 십진수) 값을 의미합니다.

그림 1. Python 문자열 숫자 앞에 0 채우기: printf 스타일 문자열 포맷팅
그림 1. Python 문자열 숫자 앞에 0 채우기: printf 스타일 문자열 포맷팅

str.zfill() 메서드

str.zfill() 메서드 사용법은 다음과 같습니다. 파라미터로 width 값을 받습니다. width 값은 정수 값이어야 합니다.

주어진 문자열의 길이보다 width 값이 크면 그만큼 문자열 앞에 아스키 문자 ‘0’을 채워넣습니다. 부호를 표시하는 경우에는 printf 스타일링 방식과 마찬가지로 해당 부호를 먼저 출력하고 남은 공간을 0으로 채웁니다. 만약 주어진 문자열의 길이가 width보다 긴 경우에는 그냥 주어진 문자열을 그대로 돌려줍니다.

str.zfill(width)

그럼 str.zfill() 메서드를 코드를 통해서 직접 사용해 보겠습니다.

value = 31
str(value).zfill(5)
value = -31
str(value).zfill(5)
Python

숫자를 문자열로 전환한 후 zfill() 메서드를 사용해서 5칸 길이로 만들기로 했습니다. 양수의 경우는 31 앞에 ‘0’ 문자가 3개 채워졌으며, 음수의 경우에는 음수 부호를 먼저 표기하고, ‘0’ 문자 2개를 채워넣었습니다.

그림 2. Python 문자열 숫자 앞에 0 채우기: str.zfill() 메서드 적용
그림 2. Python 문자열 숫자 앞에 0 채우기: str.zfill() 메서드 적용

format() 함수

Python의 Built-in Function으로 있는 format() 함수입니다. 사용법은 다음과 같습니다.

포맷하고자 하는 값으로 value 파라미터를 전달하면 되며, format_spec에서는 어떤 형식으로 포맷팅 할 것인지 결정하면 됩니다.

format(valueformat_spec='')

앞서 살펴본 printf 스타일처럼 사용할 수 있습니다. 대신에 %나 d 같은 문자는 사용하지 않아도 됩니다.

value = 31
format(value, '5')
format(value, '05')
format(-value, '05')
Python

format_spec으로 ‘5’라고 해 주면 문자열 길이를 5칸으로 잡고 오른쪽 정렬을 하며 빈 공간은 스페이스 문자(‘ ‘)로 채우게 됩니다. 나머지 형식들은 위에서 printf-style 문자열 포매팅 방식이나 str.zfill의 결과와 크게 다르지 않습니다.

str.format() 메서드

str.format() 메서드는 방금 앞서 본 Built-in Function인 format()과는 조금 다릅니다. ‘{0:05d}’에서 처음 나오는 0은 format() 메서드에서 넘겨주는 첫번째 파라미터가 전달된다는 의미입니다. 콜론(:) 뒤의 ’05d’는 5칸의 고정폭 문자열을 만들되 숫자값을 오른쪽 정렬하고 남은 공간은 ‘0’으로 채우겠다는 앞에서 살펴본 것과 동일한 의미입니다.

print('{0:05d}'.format(31))
print('{0:05d}'.format(-31))
Python

적용한 결과는 아래와 같습니다.

정리

printf-style 방식과 zfill, 빌트인 함수 format()과 str.format() 메서드를 사용한 방식이 있었습니다. 잘 보면 비슷비슷하죠. 가장 간결하게 사용할 수 있는 것은 zfill인 것으로 보입니다. str.format() 메서드나 printf-style 방식은 다른 문자열들과 함께 출력해야 할 때 유용하게 사용할 수 있습니다.

관련 자료

Python의 Built-in Types 페이지Python의 Built-in Functions 페이지를 참고했습니다.

같이 읽으면 좋은 글

Leave a Comment