sodcalculator

10 Tech How-To

Python Strings: Formatting and Text Handling

Guide 10-41931 · Updated · Step by step

To work with text in Python, you create string objects using quotes, and you format them with methods like format() or f-strings. This article explains how to write, format, and manipulate strings in Python, covering everything from basic syntax to advanced text processing.

What Are Python Strings?

In Python, a string is a sequence of Unicode characters enclosed in single quotes ('...'), double quotes ("..."), or triple quotes ('''...''' or """...""") for multi-line text. Strings are immutable, meaning once created, their content cannot be changed; any operation that appears to modify a string actually creates a new string object.

Creating and Writing Strings

You can create strings in several ways:

  • Single or double quotes: 'hello' or "world" – choose either, but be consistent.
  • Triple quotes: '''multi-line''' or """multi-line""" – preserves line breaks and indentation.
  • Raw strings: prefix with r (e.g., r'C:\new\file') to treat backslashes as literal characters, useful for regex and file paths.
  • String concatenation: using the + operator or join() for multiple strings.
  • String repetition: using * to repeat a string (e.g., 'ab' * 3 gives 'ababab').

Example:

name = "Alice"
message = 'Hello, ' + name + '!'
print(message)  # Output: Hello, Alice!

String Formatting Methods

Python offers several ways to format strings, each with its own use case:

  • % formatting (old style): "%s is %d years old" % (name, age) – similar to C’s printf, but less readable and now discouraged.
  • str.format() (Python 2.6+): "{} is {} years old".format(name, age) – uses curly braces as placeholders and supports positional and keyword arguments.
  • f-strings (Python 3.6+): f"{name} is {age} years old" – the most modern and readable method, allowing inline expressions.
  • Template strings: from the string module, using $ placeholders (e.g., Template('$name is $age').substitute(name=name, age=age)) – useful when user input is involved to avoid injection.

Example with f-strings:

name = "Bob"
age = 30
print(f"{name} is {age} years old")  # Output: Bob is 30 years old

Common String Operations

Beyond formatting, you’ll often need to manipulate text. Key operations include:

  • Accessing characters: s[0], s[-1], slicing s[1:4].
  • Length: len(s).
  • Case conversion: s.upper(), s.lower(), s.title(), s.capitalize().
  • Searching: s.find(sub), s.index(sub), s.count(sub), in operator.
  • Replacing: s.replace(old, new) – replaces all occurrences.
  • Splitting and joining: s.split(sep) returns a list; sep.join(list) combines a list into a string.
  • Stripping whitespace: s.strip(), s.lstrip(), s.rstrip().
  • Checking content: s.isdigit(), s.isalpha(), s.isalnum(), s.startswith(prefix), s.endswith(suffix).

Unicode and Encoding

Python 3 strings are Unicode by default, meaning they can store any character from any language. When reading or writing text to files or network sockets, you must specify an encoding (usually UTF-8). Use s.encode('utf-8') to convert to bytes and b.decode('utf-8') to convert back. Common pitfalls include mixing str and bytes, and forgetting to specify encoding when opening files (use open('file.txt', encoding='utf-8')).

Advanced Text Processing

For more complex text manipulation, Python offers:

  • Regular expressions: the re module provides re.search(), re.findall(), re.sub() for pattern matching and substitution.
  • String translation: str.translate() with a translation table to replace or delete specific characters.
  • Text alignment and padding: s.ljust(width), s.rjust(width), s.center(width), or using format specs like f"{s:<10}".
  • Working with multiline strings: use textwrap module to wrap or fill paragraphs.

Example with regex:

import re
pattern = r'\d+'
text = "There are 12 apples and 5 oranges"
numbers = re.findall(pattern, text)
print(numbers)  # Output: ['12', '5']

Common Mistakes and Best Practices

Here are frequent pitfalls and how to avoid them:

  • Using + in a loop: concatenating strings in a loop is inefficient; use ''.join(list) instead.
  • Forgetting immutability: s[0] = 'a' raises a TypeError; create a new string.
  • Mixing str and bytes: in Python 3, 'abc' + b'def' fails; decode bytes first.
  • Not using f-strings: they are faster and more readable than format() or %.
  • Overlooking escape sequences: \n for newline, \t for tab, \\ for backslash – use raw strings for paths.
  • Assuming split() without arguments splits on spaces: it actually splits on any whitespace and removes empty strings; use split(' ') for single spaces.

Performance Considerations

String operations in Python are generally fast, but for large text processing, consider these tips:

  • Use join() for concatenation: it’s more efficient than + in loops because it allocates once.
  • Prefer f-strings over format(): they are evaluated at runtime but still faster than older methods.
  • Avoid repeated replace() calls: if you need to replace many different substrings, consider using re.sub() with a function.
  • Use str.translate() for character-level replacements: it’s faster than a loop of replace().

Frequently Asked Questions

How do I convert an integer to a string in Python?

Use the built-in str() function: str(42) returns '42'. For formatting with leading zeros, use f"{42:03d}" which gives '042'.

What is the difference between format() and f-strings?

Both produce formatted strings, but f-strings are more concise and allow inline expressions. format() is useful when you need to store the format template separately (e.g., in a configuration file) or when supporting older Python versions (before 3.6).

How do I check if a string contains only numbers?

Use s.isdigit() – it returns True if all characters are digits and the string is not empty. For decimal numbers with a sign or decimal point, use a regex like ^[+-]?\d+(\.\d+)?$.

How do I remove all whitespace from a string?

Use s.replace(' ', '') to remove spaces, or ''.join(s.split()) to remove all whitespace characters (spaces, tabs, newlines). For leading/trailing whitespace only, use s.strip().

Why do I get a TypeError when concatenating a string and an integer?

Because Python doesn’t implicitly convert types. Convert the integer to a string first: "The number is " + str(5), or use an f-string: f"The number is {5}".

How can I split a string by multiple delimiters?

Use re.split() from the re module, e.g., re.split(r'[;,]', text) splits on semicolons or commas. This is more flexible than the simple split() method.

Related

General steps for current mainstream versions; menus can differ by device and version. See the disclaimer or report an error.

More in this bed

The whole Tech How-To bed →