Python String Formatting Tutorial: Modern Ways to Format Strings

Last updated 5 months, 1 week ago | 368 views 75     5

Tags:- Python

String formatting is an essential part of Python that allows you to inject variables into strings, format numbers, align text, and more. Whether you're building a user interface, writing logs, or generating reports, mastering string formatting will make your code more readable and powerful.

This tutorial covers:

  • Different ways to format strings in Python

  • f-strings, format(), and % formatting

  • Number formatting

  • Alignment and padding

  • Tips, pitfalls, and a complete example


What is String Formatting?

String formatting lets you dynamically construct strings by inserting variables and controlling how data appears.

For example:

name = "Alice"
print(f"Hello, {name}!")

Output:

Hello, Alice!

Method 1: f-Strings (Python 3.6+)

The f-string (formatted string literal) is the most modern and readable way to format strings.

Syntax:

f"Text {expression}"

Example:

name = "Bob"
age = 30
print(f"{name} is {age} years old.")

Output:

Bob is 30 years old.

You can also use expressions directly:

print(f"Next year, {age + 1} years old.")

Method 2: str.format()

The .format() method works in Python 2.7+ and 3.x and is very flexible.

Basic Usage:

"{} is {} years old".format("Bob", 30)

Output:

Bob is 30 years old

Using Named Placeholders:

"{name} is {age} years old".format(name="Alice", age=25)

Reordering:

"{1} comes after {0}".format("first", "second")

Method 3: %-formatting (Old Style)

This method is older and similar to C-style formatting.

"%s is %d years old" % ("Alice", 25)

Output:

Alice is 25 years old

Format Specifiers:

Format Meaning
%s String
%d Integer
%f Float

Number Formatting

Decimal Places with f-strings:

pi = 3.14159
print(f"Value of pi: {pi:.2f}")

Output:

Value of pi: 3.14

Thousand Separators:

num = 1000000
print(f"{num:,}")

Output:

1,000,000

 Alignment and Padding

You can align strings or numbers using f-strings or .format():

f-Strings:

print(f"{'left':<10} | {'center':^10} | {'right':>10}")

Output:

left       |  center   |      right

Format method:

print("{:<10} {:^10} {:>10}".format("left", "center", "right"))

Formatting with Dictionaries and Lists

From a dictionary:

person = {"name": "Alice", "age": 25}
print("{name} is {age} years old".format(**person))

From a list:

values = ["Alice", 25]
print("{} is {} years old".format(*values))

Complete Example: Generating a Report

def generate_report(name, score, total):
    percentage = (score / total) * 100
    print(f"Student: {name}")
    print(f"Score: {score}/{total}")
    print(f"Percentage: {percentage:.2f}%")
    print(f"{'Status:':<10} {'Passed' if percentage >= 50 else 'Failed'}")

generate_report("Alice", 78, 100)

Output:

Student: Alice
Score: 78/100
Percentage: 78.00%
Status:    Passed

Tips

✅ Prefer f-strings for readability and performance (Python 3.6+)
✅ Use .format() if you need backward compatibility
✅ Always format numeric output for clarity (e.g., 2 decimal places)
✅ Use alignment and padding for table-like output
✅ For logging, consider using f-strings or template strings


⚠️ Common Pitfalls

Pitfall Solution
Forgetting f in f-string f"{name}", not "{name}"
Mixing types improperly Convert numbers to strings or use proper format specifiers
Using old-style formatting with new Python features Use f-strings in Python 3.6+
Overusing complex expressions in f-strings Assign complex values to variables before formatting

Summary

Python gives you multiple ways to format strings—each with its own strengths:

Method Best For
f-Strings Modern, readable, Python 3.6+
.format() Compatibility, flexibility
% Legacy code or C programmers

Start using f-strings for most use cases, and you'll write cleaner and more intuitive string handling code.