tl;dr; Use f"{number:,}" to thousands format an integer to a string.

I keep forgetting and having to look this up every time. Hopefully by blogging about it, this time it'll stick in my memory. And hopefully in yours too :)

Suppose you have a number, like 1234567890 and you want to display it, here's how you do it:


>>> number = 1234567890
>>> f"{number:,}"
'1,234,567,890'

In the past, before Python 3.6, I've been using:


>>> number = 1234567890
>>> format(number, ",")
'1,234,567,890'

All of this and more detail can be found in PEP 378 -- Format Specifier for Thousands Separator. For example, you can do this beast too:


>>> number = 1234567890
>>> f"{number:020,.2f}"
'0,001,234,567,890.00'

which demonstrates (1) how to do zero-padding (of length 20), (2) the thousands comma, (3) round to 2 significant figures. All useful weapons to be able to draw from the top of your head.

UPDATE

Also, incredibly useful is the equivalent of somestring.ljust(10):


>>> mystr = "peter"
>>> f"{mystr:10}"
'peter     '
>>> f"{mystr:>10}"
'     peter'

Comments

Post your own comment
John S.

You can also format numbers with an underscore separator instead of commas (`format(number, '_')`). That has the advantage of being both quickly human-eye-parsable AND python parsable, e.g. you can copy and paste the output right back into the REPL (and quite a few other languages also understand numbers with underscore separators).

Also, since the variable *named* underscore is the last result shown in the REPL, you can reformat the last output with underscore separators by typing `f"{_:_}"`, which is silly and confusing syntax but often pretty convenient.

Peter Bengtsson

Cheers! This is a good point. Practical.

Todd S

I love it.
I tried the following, it printed with none of the single quotes.

num = int(input("Please enter number:")) # Input a number, using int as integer
print(f"{num: ,}") # Without the single quotes
===========================
Please enter number: 1234567890
===========================
1,234,567,890

Peter Bengtsson

"none of the single quotes"?? What do you mean?

Todd S

>>> number = 1234567890
>>> f"{number:,}"
'1,234,567,890'
======================
This came from your example,
do you see the single quotes.
======================
' 1,234,567,890'

When using the print cmd,
you don't get those as indicated in the
previous post.

Peter Bengtsson

The single quotes come from the __repr__ method. If you do `print(repr('some string'))` the output becomes: 'some string'
But if you do just `print('some string')` the output becomes: some string

See https://docs.python.org/3/library/functions.html#repr

In the Python interactive shell if you just type a variable or expression and hit enter, it will automatically do `print(repr(thing))` for you.
I.e.:

>>> thing = 'string'
>>> thing
'string'

Chris P.

I've been looking for a reasonable way to do this. Thanks.

Paul Jacobson

This is very helpful, thank you for sharing this! I had a relatively complicated method using a function I created to handle this. These options are so much simpler!

Petar Petrenko

And what about if I want to use dot as thousands separator? How can I achieve this?
Thank you.

Your email will never ever be published.

Previous:
hashin 0.14.5 and canonical pip hashes January 31, 2019 Python
Next:
Displaying fetch() errors and unwanted responses in React February 6, 2019 Web development, React, JavaScript
Related by category:
How I run standalone Python in 2025 January 14, 2025 Python
How to resolve a git conflict in poetry.lock February 7, 2020 Python
get in JavaScript is the same as property in Python February 13, 2025 Python
Best practice with retries with requests April 19, 2017 Python
Related by keyword:
How to pad/fill a string by a variable in Python using f-strings January 24, 2020 Python
How do you thousands-comma AND whitespace format a f-string in Python March 17, 2024 Python
Credit Card formatter in Javascript November 19, 2013 JavaScript
Format numbers with numberWithCommas() or Number.toLocaleString() March 5, 2019 Web development, JavaScript