Stringhe in Python: metodi split, replace, strip, join, slice e f-string
La stringa in Python (tipo str) è una sequenza immutabile di caratteri Unicode. Il metodo split() divide una stringa in una lista, join() riunisce una lista in una stringa, replace() sostituisce una sottostringa, strip() elimina gli spazi ai bordi; ogni metodo restituisce una nuova stringa. Per inserire valori conviene la f-string: f"{name}: {price:.2f}".
Le stringhe in Python compaiono in ogni programma: input dell'utente, nomi di file, righe di un CSV, risposte di un'API. Il tipo str conserva il testo in Unicode, quindi caratteri cirillici, accentati ed emoji funzionano senza configurazioni. I metodi più usati sono split, replace, strip e join, mentre per stampare i valori conviene la f-string. Vediamo tutto con esempi.
Come è fatta una stringa in Python
Una stringa si scrive tra apici singoli o doppi, senza differenze: 'caffè' e "caffè" sono identiche. Le triple virgolette creano una stringa su più righe, in cui gli a capo vengono conservati così come sono.
name = "Caffè"
note = """Prima riga
Seconda riga"""
print(len(name)) # 5 — lunghezza della stringa in caratteri
La proprietà fondamentale delle stringhe è l'immutabilità. Un metodo non modifica la stringa, ma ne restituisce una nuova. Quindi s.replace("a", "b") senza assegnazione non cambia nulla: bisogna scrivere s = s.replace("a", "b"). È l'errore più comune dei principianti.
Caratteri speciali, a capo e stringhe grezze
Il ritorno a capo si indica con \n, la tabulazione con \t, la barra rovesciata con \\. Il prefisso r rende la stringa «grezza»: le barre rovesciate al suo interno non vengono interpretate. È comodo per i percorsi di Windows e per le espressioni regolari.
print("Totale:\n350 €")
path = r"C:\nuova\tabella.csv" # \n e \t non diventano caratteri speciali
Un'espressione lunga si può spezzare su più righe di codice racchiudendola tra parentesi: le stringhe letterali adiacenti tra parentesi vengono unite automaticamente da Python.
split: dividere una stringa in una lista
Il metodo split() divide la stringa in base a un separatore e restituisce una lista. Senza argomenti taglia su qualsiasi spazio bianco e ignora gli spazi ripetuti, il che è comodo per analizzare comandi.
"add Caffè 250".split() # ['add', 'Caffè', '250']
"2026-10-16".split("-") # ['2026', '10', '16']
"a,b,,c".split(",") # ['a', 'b', '', 'c']
"key=value=x".split("=", 1) # ['key', 'value=x']
Notate la differenza: con un separatore esplicito i frammenti vuoti vengono conservati. Il secondo argomento maxsplit limita il numero di tagli, mentre rsplit() taglia da destra. Per dividere un testo in righe si usa splitlines(): riconosce sia \n sia \r\n e non lascia un elemento vuoto alla fine.
text = "caffè\ntaxi\n"
text.split("\n") # ['caffè', 'taxi', '']
text.splitlines() # ['caffè', 'taxi']
join: unire una lista in una stringa
join() è l'operazione inversa. Si richiama sulla stringa separatrice e riceve come argomento una lista di stringhe:
items = ["caffè", "taxi", "pranzo"]
print(", ".join(items)) # caffè, taxi, pranzo
print("\n".join(items)) # ogni voce su una riga separata
Tutti gli elementi devono essere stringhe, altrimenti si ottiene TypeError: sequence item 0: expected str instance, int found. I numeri vanno convertiti prima: ", ".join(str(x) for x in amounts).
Concatenazione e unione di stringhe
Due stringhe si sommano con + e si ripetono con *: "-" * 20. Ma unire centinaia di frammenti in un ciclo con += è lento, perché ogni volta si crea una nuova stringa. Meglio raccogliere le parti in una lista e unirle con un unico join(). Una stringa non si può sommare direttamente a un numero: "Totale: " + 5 genera TypeError, serve la funzione str() oppure una f-string.
replace: sostituire una sottostringa
replace(old, new) sostituisce tutte le occorrenze della sottostringa. Il terzo argomento limita il numero di sostituzioni.
price = "1 250,50"
price = price.replace(" ", "").replace(",", ".")
print(float(price)) # 1250.5
"a-b-c".replace("-", "+", 1) # 'a+b-c'
Il metodo distingue maiuscole e minuscole e cerca una corrispondenza esatta. Per sostituzioni basate su uno schema (per esempio «tutte le cifre») serve il modulo re con la funzione re.sub().
strip, lstrip, rstrip: ripulire una stringa
strip() elimina spazi, tabulazioni e a capo da entrambi i lati. lstrip() pulisce solo a sinistra, rstrip() solo a destra. È la prima cosa da fare con l'input dell'utente e con le righe lette da un file.
raw = " Caffè \n"
raw.strip() # 'Caffè'
raw.rstrip() # ' Caffè'
"xxCaffèxx".strip("x") # 'Caffè'
L'argomento indica un insieme di caratteri, non una sottostringa: "abcTestocba".strip("abc") elimina da entrambi i bordi tutte le a, le b e le c, in qualsiasi ordine, e restituisce 'Testo'. Per togliere esattamente un prefisso o un suffisso usate removeprefix() e removesuffix() (dalla versione 3.9).
Altri metodi utili delle stringhe
| Metodo | Che cosa fa | Esempio → risultato |
|---|---|---|
lower(), upper() | maiuscole e minuscole | "Caffè".lower() → 'caffè' |
startswith(), endswith() | verifica dell'inizio e della fine | "a.csv".endswith(".csv") → True |
find() | posizione della sottostringa oppure -1 | "caffè".find("f") → 2 |
count() | numero di occorrenze | "banana".count("a") → 3 |
isdigit() |
Domande frequenti
Come si calcola la lunghezza di una stringa in Python?
La funzione len(s) restituisce il numero di caratteri. Per cirillico ed emoji si contano i caratteri Unicode, non i byte; la dimensione in byte si ottiene con len(s.encode("utf-8")).
Come trasformare un numero in stringa e viceversa?
str(250) restituisce '250', mentre int("250") e float("2.5") fanno la conversione inversa. Se la stringa non è un numero, int() genera ValueError, quindi l'input va verificato.
Perché replace non modifica la mia stringa?
Le stringhe sono immutabili e replace restituisce una nuova stringa. Assegnate il risultato: s = s.replace("a", "b").
Come verificare che una stringa sia vuota?
Una stringa vuota è considerata falsa, quindi basta if not s:. Se la stringa può contenere solo spazi, controllate con if not s.strip():.
In che cosa una t-string si differenzia da una f-string?
La f-string restituisce subito una str pronta, mentre la t-string (Python 3.14+) è un oggetto Template con pezzi di testo e valori separati. Ciò permette di escapare in modo sicuro i dati per HTML e SQL.
Questo argomento è trattato in modo approfondito, con pratica, nel corso «Python 3.15: от новичка до профи».
Vai al corso