(Sponsors) Get started learning Python with DataCamp's free Intro to Python tutorial. Learn Data Science by completing interactive coding challenges and watching videos by expert instructors. Start Now!

# Python String Formatting

Updated on Jan 07, 2020

The `format()`

method allows you format string in any way you want.

**Syntax:** `template.format(p1, p1, .... , k1=v1, k2=v2)`

template is a string containing format codes, `format()`

method uses it's argument to substitute value for each format codes. For e.g:

```
>>> 'Sam has {0} red balls and {1} yellow balls'.format(12, 31)
```

`{0}`

and `{1}`

are format codes. The format code `{0}`

is replaced by the first argument of `format()`

i.e `12`

, while `{1}`

is replaced by the second argument of `format()`

i.e `31`

.

**Expected Output:**

```
Sam has 12 red balls and 31 yellow balls
```

This technique is okay for simple formatting but what if you want to specify precision in floating point number? For such thing you need to learn more about format codes. Here is the full syntax of format codes.

**Syntax:** `{[argument_index_or_keyword]:[width][.precision][type]}`

The `type`

can be used with format codes:

Format codes | Description |
---|---|

`d` |
for integers |

`f` |
for floating point numbers |

`b` |
for binary numbers |

`o` |
for octal numbers |

`x` |
for octal hexadecimal numbers |

`s` |
for string |

`e` |
for floating point in exponent format |

Following examples will make things more clear.

**Example 1:**

```
>>> "Floating point {0:.2f}".format(345.7916732)
```

Here we specify `2`

digits of precision and `f`

is used to represent floating point number.

**Expected Output:**

```
Floating point 345.79
```

**Example 2:**

1 2 | ```
>>> import math
>>> "Floating point {0:10.3f}".format(math.pi)
``` |

Here we specify `3`

digits of precision, `10`

for width and `f`

for floating point number.

**Expected Output:**

```
Floating point 3.142
```

**Example 3:**

```
"Floating point pi = {0:.3f}, with {1:d} digit precision".format(math.pi, 3)
```

Here `d`

in `{1:d}`

represents integer value.

**Expected Output:**

```
Floating point pi = 3.142, with 3 digit precision
```

You need to specify precision only in case of floating point numbers if you specify precision for integer `ValueError`

will be raised.

**Example 5:**

```
'Sam has {1:d} red balls and {0:d} yellow balls'.format(12, 31)
```

**Expected Output:**

```
Sam has 31 red balls and 12 yellow balls
```

**Example 6:**

```
"In binary 4 is {0:b}".format(4) # b for binary, refer to Fig 1.1
```

**Expected Output:**

```
In binary 4 is 100
```

**Example 7:**

1 2 | ```
array = [34, 66, 12]
"A = {0}, B = {1}, C = {2}".format(*array)
``` |

**Expected Output:**

```
A = 34, B = 66, C = 12
```

**Example 8:**

1 2 3 4 5 6 | ```
d = {
'hats' : 122,
'mats' : 42
}
"Sam had {hats} hats and {mats} mats".format(**d)
``` |

**Expected Output:**

```
Sam had 122 hats and 42 mats
```

The `format()`

method also supports keywords arguments.

```
'Sam has {red} red balls and {green} yellow balls'.format(red = 12, green = 31)
```

Note while using keyword arguments we need to use arguments inside `{}`

not numeric index.

You can also mix position arguments with keywords arguments

1 2 | ```
'Sam has {red} red balls, {green} yellow balls \
and {0} bats'.format(3, red = 12, green = 31)
``` |

The `format()`

method of formatting string is quite new and was introduced in Python 2.6 . There is another old technique you will see in legacy codes which allows you to format string using `%`

operator instead of `format()`

method.

Let's take an example.

```
"%d pens cost = %.2f" % (12, 150.87612)
```

Here we are using template string on the left of `%`

. Instead of `{}`

for format codes we are using `%`

. On the right side of `%`

we use tuple to contain our values. `%d`

and `%.2f`

are called as format specifiers, they begin with `%`

followed by character that represents the data type. For e.g `%d`

format specifier is a placeholder for a integer, similarly `%.2f`

is a placeholder for floating point number.

So `%d`

is replaced by the first value of the tuple i.e `12`

and `%.2f`

is replaced by second value i.e `150.87612`

.

**Expected Output:**

```
12 pens cost = 150.88
```

Some more examples.

**Example 1:**

New:

```
"{0:d} {1:d} ".format(12, 31)
```

Old:

```
"%d %d" % (12, 31)
```

**Expected Output:**

```
12 31
```

**Example 2:**

New:

```
"{0:.2f} {1:.3f}".format(12.3152, 89.65431)
```

Old:

```
"%.2f %.3f" % (12.3152, 89.65431)
```

**Expected Output:**

```
12.32 89.654
```

**Example 3:**

New:

```
"{0:s} {1:o} {2:.2f} {3:d}".format("Hello", 71, 45836.12589, 45 )
```

Old:

```
"%s %o %.2f %d" % ("Hello", 71, 45836.12589, 45 )
```

**Expected Output:**

```
Hello 107 45836.13 45
```

Other Tutorials (Sponsors)

This site generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join over a million other learners and get started learning Python for data science today!

View Comments