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?

- 6,899
- 7
- 44
- 59

- 1,527
- 2
- 12
- 10
-
1It 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 Answers
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.

- 6,899
- 7
- 44
- 59
-
6Have been coding in python for 5 years and I have never come across this function. Great info. – seralouk Jun 28 '21 at 10:19
Since python 3.6 you can use fstring :
>>> length = 1
>>> print(f'length = {length:03}')
length = 001

- 15,656
- 4
- 23
- 21
-
4Safer 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
There are many ways to achieve this but the easiest way in Python 3.6+, in my opinion, is this:
print(f"{1:03}")

- 3,720
- 2
- 20
- 40
-
2Could you please explain this syntax, or link where I may read more about it? – Cherona Sep 03 '20 at 11:41
-
3
-
2I 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
-
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'))

- 100,903
- 11
- 120
- 169
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!