Python Strings: Complete Beginner Guide

Published on: July 10, 2026
Reading time: 4 minutes
Manipulação e formatação de strings em Python

Python strings represent text. Names, messages, file paths, URLs, product descriptions, and data received from users are all commonly stored as strings.

Python makes basic text handling easy, but strings also include powerful tools for slicing, searching, replacing, validation, formatting, encoding, and transformation. This guide moves from the fundamentals to practical patterns used in real programs.

Creating strings

Use single or double quotes:

first_name = "Olivia"
message = 'Python is readable'

Triple quotes create multiline strings:

description = """This product includes:
- a keyboard
- a mouse
- a carrying case"""

Choose one style consistently. Double quotes are convenient when the text contains an apostrophe, while single quotes avoid escaping embedded double quotes.

Strings are sequences

Each character has a zero-based position:

language = "Python"

print(language[0])   # P
print(language[1])   # y
print(language[-1])  # n

Negative indexes count from the end. Accessing a position outside the string raises IndexError.

The official Python string documentation describes text sequences and their methods.

Slicing strings

Slicing extracts part of a string with [start:stop:step]:

text = "Programming"

print(text[0:7])
print(text[7:])
print(text[:4])
print(text[::2])
print(text[::-1])

The stop position is excluded. Slicing is safe when the stop index exceeds the string length. The complete Python slicing guide explains the same syntax for lists and tuples.

Strings are immutable

You cannot replace a character in place:

word = "cat"
# word[0] = "b"  # TypeError

Instead, create a new string:

word = "b" + word[1:]
print(word)  # bat

String methods also return new values. Assign the result when you need to keep the change.

Changing letter case

name = "  aLEX JOHNSON  "

print(name.lower())
print(name.upper())
print(name.title())
print(name.capitalize())
print(name.strip())

For case-insensitive comparisons, casefold() is more aggressive and Unicode-aware than lower():

answer = input("Continue? ").strip().casefold()
if answer == "yes":
    print("Continuing")

The guide to Python input() shows how cleaning text improves interactive programs.

Searching inside strings

The in operator checks whether a substring exists:

email = "[email protected]"

print("@" in email)
print("admin" not in email)

find() returns the first position or -1:

sentence = "Python makes automation practical"
position = sentence.find("automation")
print(position)

index() is similar but raises ValueError when the substring is missing. Use count() to count occurrences:

print("banana".count("a"))

See the guide to the Python in operator for membership tests across different collection types.

Replacing text

template = "Hello, NAME!"
message = template.replace("NAME", "Ava")
print(message)

You can limit replacements:

text = "one one one"
print(text.replace("one", "two", 1))

Remember that replace() returns a new string and does not modify the original.

Splitting strings

split() turns text into a list:

line = "Python,JavaScript,Go"
languages = line.split(",")
print(languages)

Without an argument, it splits on runs of whitespace:

words = "  clean   readable code  ".split()
print(words)

splitlines() handles multiline text:

lines = "first\nsecond\nthird".splitlines()

Joining strings

join() combines an iterable of strings:

words = ["learn", "Python", "today"]
sentence = " ".join(words)
print(sentence)

It is usually more efficient and readable than repeatedly adding strings in a loop.

parts = []
for number in range(1, 6):
    parts.append(str(number))

result = ", ".join(parts)
print(result)

Checking string content

Validation methods return Boolean values:

print("Python3".isalnum())
print("Python".isalpha())
print("12345".isdigit())
print("   ".isspace())
print("hello".islower())
print("TITLE".isupper())

These methods are useful for simple validation, but real email addresses, passwords, dates, and identifiers often require additional rules.

Formatting with f-strings

F-strings embed expressions directly in text:

product = "Monitor"
price = 249.9
quantity = 2

print(f"{quantity} × {product}: ${price * quantity:.2f}")

They support alignment and numeric formats:

name = "Keyboard"
price = 89.5

print(f"{name:<20} ${price:>8.2f}")

The tutorial on f-string number formatting includes currencies, percentages, dates, padding, and thousands separators.

Escape characters and raw strings

print("First line\nSecond line")
print("Column 1\tColumn 2")
print("She said: \"Hello\"")

A raw string treats backslashes more literally:

windows_path = r"C:\Users\Ava\Documents"
pattern = r"\d{4}-\d{2}-\d{2}"

Raw strings are common in file paths and regular expressions. The Python regex guide explains pattern-based searching and validation.

Unicode and encoding

Python strings store Unicode text, so they can contain accented letters, non-Latin scripts, and emoji:

greeting = "Olá — こんにちは — Hello 👋"
print(greeting)

When saving or transmitting text, it must be encoded into bytes:

text = "café"
data = text.encode("utf-8")
restored = data.decode("utf-8")

print(data)
print(restored)

Use an explicit encoding when opening files:

with open("message.txt", "w", encoding="utf-8") as file:
    file.write(greeting)

The guide to UTF-8 encoding errors covers mismatched encodings and invalid bytes.

Useful prefixes and suffixes

filename = "report_2026.csv"

print(filename.startswith("report_"))
print(filename.endswith(".csv"))

Modern Python also supports removeprefix() and removesuffix():

url = "https://example.com"
host = url.removeprefix("https://")

Practical example: normalize names

def normalize_name(raw_name):
    cleaned = " ".join(raw_name.strip().split())
    return cleaned.title()

names = [
    "  aLEX   johnSON ",
    "maria silva",
    "  CHRIS lee",
]

for name in names:
    print(normalize_name(name))

This function removes extra external and internal whitespace before applying title case.

Practical example: word frequency

text = "Python is simple, and Python is practical."

cleaned = (
    text.casefold()
    .replace(",", "")
    .replace(".", "")
)

counts = {}
for word in cleaned.split():
    counts[word] = counts.get(word, 0) + 1

for word, count in counts.items():
    print(f"{word}: {count}")

This example combines strings, loops, and dictionaries. The dictionary guide provides more counting and mapping patterns.

Practical example: simple password checks

def validate_password(password):
    problems = []

    if len(password) < 12:
        problems.append("use at least 12 characters")
    if not any(char.islower() for char in password):
        problems.append("add a lowercase letter")
    if not any(char.isupper() for char in password):
        problems.append("add an uppercase letter")
    if not any(char.isdigit() for char in password):
        problems.append("add a number")

    return problems

password = input("Password: ")
problems = validate_password(password)

if problems:
    print("Improve the password:")
    for problem in problems:
        print(f"- {problem}")
else:
    print("Password meets the basic rules")

These checks teach string methods but are not a complete password-security system. Applications should also use secure hashing and established authentication libraries.

Common mistakes

  • Trying to modify a character directly.
  • Forgetting to assign the value returned by a string method.
  • Using + repeatedly inside large loops.
  • Comparing user input without trimming and normalizing it.
  • Confusing text strings with byte sequences.
  • Opening text files without specifying an encoding.
  • Using fragile manual parsing when a standard parser exists.

Best practices

Normalize input at system boundaries, keep the original value when auditability matters, prefer f-strings for readable formatting, use join() for many pieces, and choose explicit encodings for files and network data.

Conclusion

Python strings are immutable text sequences with practical tools for indexing, slicing, searching, splitting, joining, validation, formatting, and Unicode handling. Mastering them improves almost every kind of Python program because text appears everywhere.

Practice by cleaning a list of names, parsing a small CSV-like line, counting words, and formatting a terminal report. Those exercises combine the most useful string operations in realistic ways.

Share:

Facebook
WhatsApp
Twitter
LinkedIn

Article content

    Related articles

    Programador pensando enquanto analisa código em dois monitores
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Learn Programming from Scratch: Beginner Guide

    Learn programming from scratch with a practical roadmap covering logic, languages, tools, exercises, projects, debugging, Git, and consistent study habits.

    Ler mais

    Tempo de leitura: 6 minutos
    10/07/2026
    ícone de loop com o texto 'For' abaixo
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Python for Loops: Complete Beginner Guide

    Learn Python for loops with sequences, range, enumerate, zip, dictionaries, nested loops, break, continue, comprehensions, and practical examples.

    Ler mais

    Tempo de leitura: 4 minutos
    10/07/2026
    código Python de uma tupla com o texto separado formando a frase "O que são tuplas?"
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Python Tuples: Complete Beginner Guide

    Learn Python tuples with creation, packing, unpacking, indexing, immutability, methods, named records, function returns, and practical examples.

    Ler mais

    Tempo de leitura: 5 minutos
    10/07/2026
    símbolo de PI
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Python Floats: Complete Beginner Guide

    Learn Python floats with decimal values, arithmetic, conversion, rounding, precision limits, comparisons, Decimal, math functions, and practical examples.

    Ler mais

    Tempo de leitura: 4 minutos
    10/07/2026
    notebook mostrando tela a teclado
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Python Input and Output: Complete Guide

    Learn Python input and output with input(), print(), conversions, validation, formatting, files, command-line arguments, and practical interactive programs.

    Ler mais

    Tempo de leitura: 4 minutos
    10/07/2026
    Dicionário com o logo do Python em uma página e o texto 'Dicionário Python'
    Fundamentals
    Foto de perfil de Leandro Hirt da Academify

    Python Dictionaries: Complete Beginner Guide

    Learn Python dictionaries from scratch: keys, values, methods, loops, nested data, comprehensions, merging, safe access, and practical examples.

    Ler mais

    Tempo de leitura: 4 minutos
    10/07/2026