앞에 0이있는 표시 번호


답변:


1059

Python 2 (및 Python 3)에서 다음을 수행 할 수 있습니다.

print "%02d" % (1,)

기본적 %는 비슷 printf하거나 sprintf(참조 문서를 ).


Python 3. +의 경우 다음과 같은 동작을 수행 할 수 있습니다 format.

print("{:02d}".format(1))

Python 3.6+의 경우 f-string을 사용하여 동일한 동작을 수행 할 수 있습니다 .

print(f"{1:02d}")

8
예 : 5 자리 우편 번호에 대해 "% 05d"% result [ 'postalCode']를 인쇄하십시오.
Nick Woodhams

2
x = "%02d.txt" % iTypeError ( 'str'및 'int'객체를 연결할 수 없음)를 발생 시키지만 x = "%02d.txt" % (i,)그렇지 않습니다. 흥미 롭군 그 문서가 어디에 있는지 궁금합니다
theta

@theta 2.7.6에서는 오류가 발생하지 않습니다. 어쩌면 이것은 특정 버전의 Python에서 수정 된 버그 일 수 있습니까?
Jack M.

1
아마도. 2.7.6에서는 형식 값이 튜플되지 않으면 예외가 없습니다 (적어도이 예에서는). 내 의견의 날짜를 보면 그때 2.7.3을 실행하고 있다고 생각합니다. 그 당시에는 %문자열 포매터 를 사용하는 동안 단일 변수를 튜플에 넣는 것이 안전하다는 것을 알지 못했습니다.
theta

1
자세히 설명하기 위해 문서는 다음과 같이 설명합니다. "명확한 정렬이 지정되지 않은 경우 너비 필드 앞에 0 ( '0') 문자를 사용하면 숫자 유형에 대해 부호를 인식하지 않는 0 패딩이 가능합니다. 정렬 유형이 '='인 0 '
JHS

940

당신은 사용할 수 있습니다 str.zfill:

print(str(1).zfill(2))
print(str(10).zfill(2))
print(str(100).zfill(2))

인쇄물:

01
10
100

71
숫자를 출력 할 때뿐만 아니라 변수에 할당해야 할 때 도움이 되므로이 솔루션이 마음에 듭니다 ... 예 : x = str (datetime.date.today (). month) .zfill (2) 2 월의 x는 '02'입니다.
EroSan

2
(동적 함수를 생성하는 것처럼) "{1:02d}"대신에 변수를 가질 수 없기 때문에 정답이되어야합니다 2.
Joshua Varghese

363

Python 2.6 이상 및 3.0 이상에서는 format()문자열 메소드를 사용합니다 .

for i in (1, 10, 100):
    print('{num:02d}'.format(num=i))

또는 내장 (단일 번호) 사용 :

print(format(i, '02d'))

새로운 포맷 기능에 대해서는 PEP-3101 설명서를 참조하십시오 .


29
Python 2.7.5에서도 작동합니다. 명명 된 인수를 사용하지 않으려면 '{: 02d}'. format (1)을 사용할 수도 있습니다.
Jason Martens

1
부동 소수점 "{0 : 04.0f}"를 사용하여 2.7.2에서 제대로 작동합니다. format (1.1)은 0001을 제공합니다 (: 04 = 최소 4 자,이 경우 선행 0, .0f = 소수없는 부동 소수점) . % 형식을 알고 있지만 전체 를 다시 쓰지 않고 기존 .format 문을 수정하려고했습니다 . 감사!
Michael Stimson 1

129
print('{:02}'.format(1))
print('{:02}'.format(10))
print('{:02}'.format(100))

인쇄물:

01
10
100

1
이렇게하면 문자열 내에서 인수를 여러 번 반복 할 수 있습니다.One zero:{0:02}, two zeros: {0:03}, ninezeros: {0:010}'.format(6)
srodriguex

2
Python 3 print '{:02}'.format(1)
과만

89

아니면 이거:

print '{0:02d}'.format(1)


73

에서 파이썬> = 3.6 , 당신은 간결 사용하여 도입 된 새로운 F-문자열이 작업을 수행 할 수 있습니다

f'{val:02}'

값이 및 a 인 이름 val으로 변수를 인쇄합니다 .fill0width2

특정 예제의 경우 루프 에서이 작업을 멋지게 수행 할 수 있습니다.

a, b, c = 1, 10, 100
for val in [a, b, c]:
    print(f'{val:02}')

어떤 인쇄 :

01 
10
100

f- 문자열에 대한 자세한 내용은 PEP 498 을 소개합니다.


56
x = [1, 10, 100]
for i in x:
    print '%02d' % i

결과 :

01
10
100

설명서에서 %사용하여 문자열 형식에 대한 자세한 내용을 읽으십시오 .


9
설명서 예제가 짜증납니다. 그것들은 선행 제로 샘플로 매핑을 던지므로, 어떻게 작동하는지 아직 알지 못한다면 어느 것이 무엇인지 알기가 어렵습니다. 그것이 실제로 나를 여기로 데려온 것입니다.
Grant

49

이것을 수행하는 Pythonic 방법 :

str(number).rjust(string_width, fill_char)

이렇게하면 길이가 string_width보다 큰 경우 원래 문자열이 변경되지 않고 반환됩니다. 예:

a = [1, 10, 100]
for num in a:
    print str(num).rjust(2, '0')

결과 :

01
10
100

33

또는 다른 해결책.

"{:0>2}".format(number)

3
이것은 명확하게하기위한 매개 변수를 포함 할 것이지만 이것은 파이썬 방식 일 "{0:0>2}".format(number)것입니다.-누군가 nLeadingZeros를 원한다면 그들은 또한 할 수 있다는 것을주의해야합니다 :"{0:0>{1}}".format(number, nLeadingZeros + 1)
Jonathan Allan


4

이것이 내가하는 방법입니다.

str(1).zfill(len(str(total)))

기본적으로 zfill은 추가하려는 선행 0의 수를 취하므로 가장 큰 숫자를 쉽게 가져 와서 문자열로 바꾸고 길이를 가져옵니다.

Python 3.6.5 (기본값, 2018 년 5 월 11 일 04:00:52) 
리눅스에서 [GCC 8.1.0]
자세한 내용은 "도움말", "저작권", "신용"또는 "라이센스"를 입력하십시오.
>>> 총계 = 100
>>> print (str (1) .zfill (len (str (총))))
001
>>> 총계 = 1000
>>> print (str (1) .zfill (len (str (총))))
0001
>>> 총계 = 10000
>>> print (str (1) .zfill (len (str (총))))
00001
>>> 

이것은 Datageek의 대답과 모순되지 않습니까?
Peter Mortensen 2016 년

1
width = 5
num = 3
formatted = (width - len(str(num))) * "0" + str(num)
print formatted

1

f 문자열 로이 작업을 수행 할 수 있습니다 .

import numpy as np

print(f'{np.random.choice([1, 124, 13566]):0>8}')

이렇게하면 일정한 길이의 8이 인쇄되고 나머지는 Leading으로 채워 0집니다.

00000001
00000124
00013566

0

사용하다:

'00'[len(str(i)):] + str(i)

또는 math모듈 :

import math
'00'[math.ceil(math.log(i, 10)):] + str(i)


-2

1 자리 또는 2 자리 숫자를 처리하는 경우 :

'0'+str(number)[-2:] 또는 '0{0}'.format(number)[-2:]

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.