web-dev-qa-db-ja.com

整数を先行ゼロでストリングとしてフォーマットするための最良の方法は?

定義された桁数($ cnt)の文字列を作成するには、整数に先行ゼロを追加する必要があります。この単純な関数をPHPからPythonに変換するための最良の方法は次のとおりです。

function add_nulls($int, $cnt=2) {
    $int = intval($int);
    for($i=0; $i<($cnt-strlen($int)); $i++)
        $nulls .= '0';
    return $nulls.$int;
}

これができる機能はありますか?

253
ramusus

zfill()メソッドを使用して、文字列にゼロを埋め込むことができます。

In [3]: str(1).zfill(2)
Out[3]: '01'
529
unbeknown

標準的な方法はフォーマット文字列修飾子を使うことです。これらのフォーマット文字列メソッドは、ほとんどのプログラミング言語で使用でき(たとえば、cのsprintf関数を介して)、知っておくと便利なツールです。

i = random.randint(0,99999)
print "%05d" % i

これは長さ5の文字列を出力します。


編集:Python 2.6以降では、次のものもあります。

print '{0:05d}'.format(i)

参照してください: https://docs.python.org/2/library/string.html

148
user518450

あなたはおそらくあなたの整数をフォーマットする必要があるでしょう:

'%0*d' % (fill, your_int)

例えば、

>>> '%0*d' % (3, 4)
'004'
66
SilentGhost

Python 3.6のf-stringsにより、先行ゼロを簡単に追加できます。

number = 5
print(f' now we have leading zeros in {number:02d}')

をご覧ください この良い記事 について。

36
SergioAraujo

Python 2.6ではこれが可能です。

add_nulls = lambda number, zero_count : "{0:0{1}d}".format(number, zero_count)

>>>add_nulls(2,3)
'002'
21
clorz

Python 3以降の場合:str.zfill()は依然として最も読みやすいオプションです。

しかし、新しく強力なstr.format()を調べることをお勧めします。もし0ではないものをパディングしたい場合はどうすればいいですか?

    # if we want to pad 22 with zeros in front, to be 5 digits in length:
    str_output = '{:0>5}'.format(22)
    print(str_output)
    # >>> 00022
    # {:0>5} meaning: ":0" means: pad with 0, ">" means move 22 to right most, "5" means the total length is 5

    # another example for comparision
    str_output = '{:#<4}'.format(11)
    print(str_output)
    # >>> 11##

    # to put it in a less hard-coded format:
    int_inputArg = 22
    int_desiredLength = 5
    str_output = '{str_0:0>{str_1}}'.format(str_0=int_inputArg, str_1=int_desiredLength)
    print(str_output)
    # >>> 00022
12
YunliuStorage

少なくとも2つの選択肢があります。

  • str.zfill:lambda n, cnt=2: str(n).zfill(cnt)
  • %フォーマット:lambda n, cnt=2: "%0*d" % (cnt, n)

Python> 2.5の場合は、clorzの答えの3番目のオプションを見てください。

5
tzot

組み込みのzfillに代わるものです。

この関数はxを取り、それを文字列に変換し、長さが短すぎる場合に限り、先頭にのみゼロを追加します。

def zfill_alternative(x,len=4): return ( (('0'*len)+str(x))[-l:] if len(str(x))<len else str(x) )

まとめると - build-in:zfillで十分ですが、これを手動で実装する方法に興味がある場合は、もう1つ例を示します。

簡単な変換は次のようになります。

def add_nulls2(int, cnt):
    nulls = str(int)
    for i in range(cnt - len(str(int))):
        nulls = '0' + nulls
    return nulls
1
rpr