앞에 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.