先行ゼロ付きの数値を表示する


回答:


1059

Python 2(およびPython 3)では、次のことができます。

print "%02d" % (1,)

基本的にprintfor と似ていますsprintfdocsを参照)。


Python 3. +の場合、次のコマンドでも同じ動作を実現できますformat

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

Python 3.6以降では、f-stringsを使用して同じ動作を実現できます

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

8
例:5桁の郵便番号の「%05d」%result ['postalCode']を出力します。
Nick Woodhams

2
x = "%02d.txt" % iTypeErrorを発生させます(「str」オブジェクトと「int」オブジェクトを連結できません)が発生x = "%02d.txt" % (i,)しません。面白い。それはどこに文書化さ
シータ

@theta 2.7.6では、エラーは発生しません。たぶん、これは特定のバージョンのPythonのバグだったのでしょうか?
ジャックM.

1
多分。2.7.6では、フォーマット値がタプルでない場合でも例外はありません(少なくともこの例では)。コメントの日付を見ると、私は2.7.3を実行していたと思います。そのとき、タプルに単一の変数を配置すると、%文字列フォーマッターを使用しているときに安全になることを知りませんでした。
シータ2014

1
詳しく説明すると、ドキュメントはこれをここで説明します:「明示的な配置が指定されていない場合、幅フィールドの前にゼロ(「0」)文字を付けます。これは、数値型の符号対応ゼロ埋め込みを有効にします。これは、「配置タイプが「=」の0 '。 "
JHS、2016年

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()stringメソッドを使用します。

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、2014年

1
浮動小数点「{0:04.0f}」を使用して2.7.2で正常に動作します。format(1.1)は0001を返します(:04 =少なくとも4文字、この場合は先頭に0が付き、.0f =小数のない浮動小数点) 。%の書式設定を知っていますが、全体を書き直さずに既存の.formatステートメントを変更したいと考えています。ありがとう!
Michael Stimson、2015

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の2.7を使用している場合はPython 3にのみ対応し、やるprint '{:02}'.format(1)
Blairg23


73

Python> = 3.6、あなたは簡潔に使用することによって導入された新しいF-文字列でこれを行うことができます。

f'{val:02}'

その名前の変数を印刷しvalfillの値0width2

特定の例では、これをループでうまく行うことができます:

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

印刷する:

01 
10
100

f-stringの詳細については、導入されたPEP 498を参照してください。


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

結果は:

01
10
100

ドキュメントで使用した文字列のフォーマットの詳細ご覧ください


9
ドキュメンテーションの例は最低です。彼らは先行ゼロサンプルでマッピングをスローするので、それがどのように機能するかをすでに知っていなければ、どちらがどれであるかを知ることは困難です。それが実際に私をここにもたらしたのです。
付与

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
私は明確にするためのパラメータが含まれますが、これは、Pythonの方法だろう- "{0:0>2}".format(number)誰かの意志がnLeadingZerosを望んでいるならば、彼らはまた、行うことができます注意する必要があります"{0:0>{1}}".format(number, nLeadingZeros + 1)
ジョナサン・アラン


4

これが私のやり方です:

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

基本的に、zfillは追加する先行ゼロの数を取得するため、次のように最大数を取得して文字列に変換し、長さを取得するのは簡単です。

Python 3.6.5(デフォルト、2018年5月11日、04:00:52) 
[GCC 8.1.0] Linux版
詳細については、「help」、「copyright」、「credits」、または「license」と入力してください。
>>>合計= 100
>>> print(str(1).zfill(len(str(total))))
001
>>>合計= 1000
>>> print(str(1).zfill(len(str(total))))
0001
>>>合計= 10000
>>> print(str(1).zfill(len(str(total))))
00001
>>> 

これはDatageekの回答と矛盾しませんか?
Peter Mortensen

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.