Python 3: Formatting String

By Xah Lee. Date: . Last updated: .

Convert data into string format.

# -*- coding: utf-8 -*-
# python 3

ss = [3, 4, 3.123456789012345678901234567890, (7, 8, "9")]
print (str(ss))         # [3, 4, 3.1234567890123457, (7, 8, '9')]
print (repr(ss))        # [3, 4, 3.1234567890123457, (7, 8, '9')]

In practice, they usually return the same thing.

Using C Style prinf

#-*- coding: utf-8 -*-
# python 3

# integer
print("%d" % (1234))             # 「1234」

# padding by space
print("%4d" % (12))              # 「  12」

# float. 2 integer, 4 decimal
print("%2.4f" % (3.123456789))   # 「3.1235」

# string.
print("%5s" % ("cats"))          # 「 cats」
print("%2s" % ("cats"))          # 「cats」

print("%2d◇%6d◇%2.4f◇%s" % (1234, 5678, 3.123456789, 'cats!')) # 「1234◇  5678◇3.1235◇cats!」

Using ‹string›.format(…)

A more flexible way to format string is to use string.format(…).

Inside your string, use {} as placeholder. Inside {…} is specification for the format.

# -*- coding: utf-8 -*-
# python 3

print("{}".format("cat"))       # cat

print("I have {} cats and {} dogs.".format(3,4)) # I have 3 cats and 4 dogs.

Use {{}} to include literal {}

# -*- coding: utf-8 -*-
# python 3

# use {{}} to include literal {}
print("brace {{}}, a is {}".format(3))     # brace {}, a is 3

Format Codes

# -*- coding: utf-8 -*-
# python 3

# “:s” is for string
print("{:s}".format("cat"))          # cat

# decimal int
print("{:d}".format(3))          # 3

# binary
print("{:b}".format(3))          # 11

# hex
print("{:x}".format(10))          # a

# formatting multiple args
print("{:d}, {:s}, {:s}".format(3, "cat", [7, 8]))

You can refer to the argument and change print order.

# -*- coding: utf-8 -*-
# python 3

print("{0:d}, {1:s}, {2:s}".format(3, "cat", [7, 8])) # 3, cat, [7, 8]

print("{1:s}, {0:d}, {2:s}".format(3, "cat", [7, 8])) # cat, 3, [7, 8]

Format number in human readable format:

# -*- coding: utf-8 -*-
# python 3

print("{:,}".format(78515573)) # 78,515,573

If you have a question, put $5 at patreon and message me.