138

I'm trying to make length = 001 in Python 3 but whenever I try to print it out it truncates the value without the leading zeros (length = 1). How would I stop this happening without having to cast length to a string before printing it out?

nyedidikeke
  • 6,899
  • 7
  • 44
  • 59
Gabby Freeland
  • 1,527
  • 2
  • 12
  • 10
  • 1
    It depends how you've got `001`. `length = 001` is the same as `length = 1' (number) and to get `001` you should use some string formatting (see answers). But `length = '001'` is different, it's a string and you can get number via `int(length)`. – martin-voj Jun 01 '20 at 11:25

5 Answers5

196

Make use of the zfill() helper method to left-pad any string, integer or float with zeros; it's valid for both Python 2.x and Python 3.x.

It important to note that Python 2 is no longer supported.

Sample usage:

print(str(1).zfill(3))
# Expected output: 001

Description:

When applied to a value, zfill() returns a value left-padded with zeros when the length of the initial string value less than that of the applied width value, otherwise, the initial string value as is.

Syntax:

str(string).zfill(width)
# Where string represents a string, an integer or a float, and
# width, the desired length to left-pad.
nyedidikeke
  • 6,899
  • 7
  • 44
  • 59
149

Since python 3.6 you can use fstring :

>>> length = 1
>>> print(f'length = {length:03}')
length = 001
PhE
  • 15,656
  • 4
  • 23
  • 21
  • 4
    Safer to use `print(f'length = {length:>03}')` (note the `>`) as this example would fail if length were a string, eg. `length = '1'` – bn_ln Jan 21 '23 at 00:56
46

There are many ways to achieve this but the easiest way in Python 3.6+, in my opinion, is this:

print(f"{1:03}")
Anatol
  • 3,720
  • 2
  • 20
  • 40
  • 2
    Could you please explain this syntax, or link where I may read more about it? – Cherona Sep 03 '20 at 11:41
  • 3
    @Cherona https://docs.python.org/3/library/string.html#format-examples – Anatol Sep 03 '20 at 13:30
  • 2
    I find this the easiest method. The "3" part dictates the number total digits. so {1:03} would display 001. If it was {123:03} then it would display 123. If it was {123:04} then it would display 0123, etc... – dduffy Jan 30 '22 at 19:46
  • hey that really is the slickest way! – Radamand Jul 21 '23 at 18:27
13

Python integers don't have an inherent length or number of significant digits. If you want them to print a specific way, you need to convert them to a string. There are several ways you can do so that let you specify things like padding characters and minimum lengths.

To pad with zeros to a minimum of three characters, try:

length = 1
print(format(length, '03'))
Blckknght
  • 100,903
  • 11
  • 120
  • 169
-8

I suggest this ugly method but it works:

length = 1
lenghtafterpadding = 3
newlength = '0' * (lenghtafterpadding - len(str(length))) + str(length)

I came here to find a lighter solution than this one!

Anatol
  • 3,720
  • 2
  • 20
  • 40
wydadman
  • 36
  • 5