Python String Formatting Tutorial: Modern Ways to Format Strings
Last updated 5 months, 1 week ago | 368 views 75 5

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.