To pad a string with zeros in Python, you can use several methods depending on whether you’re working with strings or numeric types (e.g., integers). Below are the most common approaches:
1. Using str.zfill()
(for strings)
The zfill()
method pads a numeric string with leading zeros to a specified width.
Key points:
- Works on strings (e.g.,
"123"
). - Automatically handles signs (
+
or-
), placing them at the start. - If the string is longer than the specified width, it returns the original string.
Example:
s = "42"
padded = s.zfill(5) # Pad to length 5
print(padded) # Output: "00042"
s_negative = "-3"
padded_negative = s_negative.zfill(5)
print(padded_negative) # Output: "-0003"
2. Using format()
or f-strings (for numbers or strings)
For numbers (integers) or strings, use Python’s string formatting with 0>
alignment and a fixed width.
For strings:
s = "7"
padded = format(s, "0>5") # Pad to length 5
print(padded) # Output: "00007"
# Using f-strings:
padded_f = f"{s:0>5}"
print(padded_f) # Output: "00007"
For integers:
num = 42
padded_num = format(num, "05d") # Pad to 5 digits
print(padded_num) # Output: "00042"
# Using f-strings:
padded_num_f = f"{num:05d}"
print(padded_num_f) # Output: "00042"
3. Using Variable Padding Width
Dynamically set the padding width using nested formatting:
width = 10
num = 7
# For integers:
padded = f"{num:0{width}d}"
print(padded) # Output: "0000000007"
# For strings:
s = "hello"
padded_str = f"{s:0>{width}}"
print(padded_str) # Output: "00000hello"
4. Handling Non-Numeric Strings
To pad a non-numeric string with zeros (e.g., "apple"
), use string formatting:
text = "apple"
padded_text = f"{text:0>10}" # Pad to length 10
print(padded_text) # Output: "00000apple"
Key Differences Between Methods
Method | Works For | Handles Signs | Variable Width Support |
---|---|---|---|
str.zfill(width) | Strings (numeric) | ✅ | ❌ |
format() /f-strings | Strings/numbers | ❌ (unless explicitly formatted) | ✅ |
Common Pitfalls
- Type Errors: Ensure numeric values are converted to strings before using
zfill()
:
num = 42
padded = str(num).zfill(5) # Convert to string first
- Overflow: If the original string/num is longer than the padding width, no truncation occurs:
"123456".zfill(3) # Output: "123456" (unchanged)
Summary Table
Goal | Code Example |
---|---|
Pad a numeric string | "42".zfill(5) → "00042" |
Pad an integer | f"{7:05d}" → "00007" |
Pad a string with variable width | f"{'9':0>{width}}" → "00009" (if width=5 ) |
Handle negative numbers | "-3".zfill(5) → "-0003" |
Choose the method that best fits your data type and use case!