Pertanyaan Cara terbaik untuk membuat angka nol


Apa cara yang paling Pythonic untuk memasukkan string numerik dengan nol ke kiri, yaitu, sehingga string numerik memiliki panjang tertentu?


997
2017-12-03 22:39


asal


Jawaban:


String:

>>> n = '4'
>>> print n.zfill(3)
004

Dan untuk angka:

>>> n = 4
>>> print '%03d' % n
004
>>> print format(n, '03') # python >= 2.6
004
>>> print '{0:03d}'.format(n)  # python >= 2.6
004
>>> print '{foo:03d}'.format(foo=n)  # python >= 2.6
004
>>> print('{:03d}'.format(n))  # python >= 2.7 + python3
004
>>> print('{0:03d}'.format(n))  # python 3
004
>>> print(f'{n:03}') # python >= 3.6
004

Dokumentasi pemformatan string.


1588
2017-12-03 22:42



Cukup gunakan rjust metode objek string.

Contoh ini akan membuat string dengan panjang 10 karakter, padding seperlunya.

>>> t = 'test'
>>> t.rjust(10, '0')
>>> '000000test'

274
2017-12-03 22:47



Untuk angka:

print "%05d" % number

Lihat juga: Python: Pemformatan string.

EDIT: Ini perlu dicatat bahwa pada kemarin 3 Desember 2008, metode pemformatan ini tidak lagi digunakan untuk mendukung format metode string:

print("{0:05d}".format(number)) # or
print(format(number, "05d"))

Lihat PEP 3101 untuk detailnya.


85
2017-12-03 22:41



>>> '99'.zfill(5)
'00099'
>>> '99'.rjust(5,'0')
'00099'

jika Anda menginginkan sebaliknya:

>>> '99'.ljust(5,'0')
'99000'

43
2018-01-10 23:19



Bekerja di kedua Python 2 dan Python 3:

>>> "{:0>2}".format("1")  # Works for both numbers and strings.
'01'
>>> "{:02}".format(1)  # Only works for numbers.
'01'

41
2018-06-24 12:31



str(n).zfill(width) akan bekerja dengan strings, ints, floats ... dan Python 2.x dan 3.x cocok:

>>> n = 3
>>> str(n).zfill(5)
'00003'
>>> n = '3'
>>> str(n).zfill(5)
'00003'
>>> n = '3.0'
>>> str(n).zfill(5)
'003.0'

32
2018-06-01 04:40



Untuk yang datang ke sini untuk mengerti dan bukan hanya jawaban cepat. Saya melakukan ini terutama untuk string waktu:

hour = 4
minute = 3
"{:0>2}:{:0>2}".format(hour,minute)
# prints 04:03

"{:0>3}:{:0>5}".format(hour,minute)
# prints '004:00003'

"{:0<3}:{:0<5}".format(hour,minute)
# prints '400:30000'

"{:$<3}:{:#<5}".format(hour,minute)
# prints '4$$:3####'

"0" simbol apa yang harus diganti dengan karakter padding "2", defaultnya adalah ruang kosong

">" simbol allign semua 2 "0" karakter di sebelah kiri string

":" melambangkan format_spec


15
2017-07-13 13:59



width = 10
x = 5
print "%0*d" % (width, x)
> 0000000005

Lihat dokumentasi cetak untuk semua detail menarik!

Pembaruan untuk Python 3.x (7,5 tahun kemudian)

Baris terakhir seharusnya sekarang:

print("%0*d" % (width, x))

Yaitu. print() sekarang berfungsi, bukan pernyataan. Perhatikan bahwa saya masih lebih suka Old School printf() gaya karena, IMNSHO, itu membaca lebih baik, dan karena, um, saya telah menggunakan notasi itu sejak Januari, 1980. Sesuatu ... anjing tua ... sesuatu sesuatu ... trik baru.


14
2017-12-03 22:44



>>> width = 4
>>> x = 5
>>> print("%0*d" %(width,x))
>>> 00005

ini akan bekerja di python 3.x


4
2017-08-01 05:44