Modificare le Stringhe
Impara a modificare le stringhe in Python con concatenazione, slicing, metodi per le maiuscole, replace, strip, split, join e altro. Include esempi eseguibili.
Le stringhe Python sono sequenze di caratteri racchiuse tra virgolette. Sebbene le stringhe siano immutabili — non è possibile modificarle direttamente — Python offre un ricco insieme di operatori e metodi che restituiscono stringhe nuove e modificate. Questo capitolo tratta le tecniche più importanti: concatenazione, ripetizione, conversione di maiuscole/minuscole, slicing, sostituzione di sottostringhe, rimozione degli spazi, suddivisione e unione, e altro ancora.
Concetto Chiave: Le Stringhe Sono Immutabili
Prima di procedere, è importante capire che ogni metodo di "modifica" restituisce una nuova stringa. La stringa originale non viene mai modificata.
greeting = "hello"
upper_greeting = greeting.upper()
print(greeting) # hello (unchanged)
print(upper_greeting) # HELLO (new string)Questo significa che devi assegnare il risultato a una variabile (o usarlo direttamente) per mantenere la modifica.
Concatenazione di Stringhe
La concatenazione combina due o più stringhe in una sola usando l'operatore +. Puoi concatenare tutte le stringhe di cui hai bisogno.
Concatenare stringhe in Python
Concatenare Variabili e Letterali
Puoi mescolare variabili stringa con letterali stringa:
first_name = "Ada"
last_name = "Lovelace"
full_name = first_name + " " + last_name
print(full_name) # Ada LovelacePer quantità maggiori di testo, considera le format string o le f-string, che sono più facili da leggere rispetto a lunghe catene di +.
Ripetizione di Stringhe
L'operatore * ripete una stringa un numero determinato di volte. È utile per generare separatori, spaziature o semplici pattern.
Ripetere una stringa in Python
Cambiare la Capitalizzazione
Python fornisce diversi metodi per cambiare la capitalizzazione di una stringa.
| Metodo | Cosa fa | Esempio input → output |
|---|---|---|
upper() | Tutte le lettere maiuscole | "hello" → "HELLO" |
lower() | Tutte le lettere minuscole | "HELLO" → "hello" |
title() | Prima lettera di ogni parola maiuscola | "hello world" → "Hello World" |
capitalize() | Prima lettera maiuscola, resto minuscolo | "hELLO" → "Hello" |
swapcase() | Scambia maiuscole↔minuscole per ogni lettera | "Hello" → "hELLO" |
Convertire una stringa in maiuscolo o minuscolo in Python
I metodi per la capitalizzazione sono comunemente usati per confrontare l'input dell'utente indipendentemente da come è stato digitato:
answer = input("Type yes or no: ")
if answer.lower() == "yes":
print("You said yes!")Slicing delle Stringhe
Lo slicing estrae una parte di una stringa usando la sintassi [start:stop:step]. Il risultato è una nuova stringa contenente i caratteri dall'indice start fino a — ma non includendo — l'indice stop.
H e l l o , W o r l d !
0 1 2 3 4 5 6 7 8 9 10 11 12
-13-12-11-10-9 -8 -7 -6 -5 -4 -3 -2 -1Eseguire lo slicing delle stringhe in Python
Quando Usare gli Indici Negativi
Gli indici negativi contano dalla fine della stringa. L'indice -1 è l'ultimo carattere, -2 è il penultimo, e così via. Questo è comodo quando si vuole ottenere la parte finale di una stringa senza conoscerne la lunghezza:
filename = "report_2024.csv"
extension = filename[-3:]
print(extension) # csvPer un approfondimento dedicato, consulta il capitolo Slicing delle Stringhe.
Sostituire Sottostringhe
Il metodo replace(old, new) restituisce una copia della stringa con ogni occorrenza di old sostituita da new. Passa un terzo argomento count per limitare il numero di sostituzioni effettuate.
Sostituire una parte di una stringa in Python
text = "I like cats. Cats are great. Cats!"
print(text.replace("Cats", "Dogs")) # replaces all occurrences
print(text.replace("Cats", "Dogs", 1)) # replaces first occurrence onlyI like cats. Dogs are great. Dogs!
I like cats. Dogs are great. Cats!Nota che replace() è case-sensitive: "cats" e "Cats" vengono trattate come sottostringhe diverse.
Rimuovere gli Spazi
I caratteri di spazio (spazi, tabulazioni, newline) all'inizio o alla fine di una stringa spesso devono essere rimossi, specialmente quando si elabora l'input dell'utente o si leggono file.
| Metodo | Rimuove gli spazi da |
|---|---|
strip() | Entrambe le estremità |
lstrip() | Solo sinistra (inizio) |
rstrip() | Solo destra (fine) |
raw = " hello world "
print(repr(raw.strip())) # 'hello world'
print(repr(raw.lstrip())) # 'hello world '
print(repr(raw.rstrip())) # ' hello world'Puoi anche rimuovere caratteri specifici passandoli come argomento:
path = "///usr/local/bin///"
print(path.strip("/")) # usr/local/binSuddividere le Stringhe
Il metodo split(sep) suddivide una stringa in corrispondenza di un separatore e restituisce una lista di sottostringhe. Senza argomenti, suddivide su qualsiasi spazio bianco e rimuove le stringhe vuote.
sentence = "Python is easy to learn"
words = sentence.split()
print(words) # ['Python', 'is', 'easy', 'to', 'learn']
csv_row = "Alice,30,Engineer"
fields = csv_row.split(",")
print(fields) # ['Alice', '30', 'Engineer']Passa un secondo argomento maxsplit per limitare il numero di suddivisioni:
data = "one:two:three:four"
print(data.split(":", 2)) # ['one', 'two', 'three:four']Unire le Stringhe
join() è l'inverso di split(). Combina una lista di stringhe in una sola, inserendo un separatore tra ogni elemento. Il separatore è la stringa su cui si chiama join().
words = ["Python", "is", "fun"]
sentence = " ".join(words)
print(sentence) # Python is fun
path_parts = ["usr", "local", "bin"]
path = "/".join(path_parts)
print(path) # usr/local/binUsare join() è molto più efficiente che concatenare stringhe in un ciclo, perché ogni + crea un nuovo oggetto stringa. join() alloca la stringa finale una sola volta.
Cercare all'Interno delle Stringhe
Diversi metodi aiutano a trovare del testo all'interno di una stringa.
find() e index()
find(sub) restituisce l'indice della prima occorrenza di sub, oppure -1 se non viene trovata. index(sub) fa la stessa cosa ma solleva ValueError invece di restituire -1.
text = "the quick brown fox"
print(text.find("quick")) # 4
print(text.find("slow")) # -1
print(text.index("brown")) # 10startswith() e endswith()
Questi restituiscono True o False e sono un'alternativa più pulita allo slicing quando si deve verificare l'inizio o la fine di una stringa.
url = "https://www.w3docs.com"
print(url.startswith("https")) # True
print(url.endswith(".com")) # True
print(url.startswith("http://")) # FalsePuoi passare una tupla di prefissi/suffissi per verificare più opzioni contemporaneamente:
filename = "photo.jpg"
print(filename.endswith((".jpg", ".jpeg", ".png"))) # Truecount()
count(sub) restituisce quante volte sub appare nella stringa (senza sovrapposizioni).
text = "banana"
print(text.count("a")) # 3
print(text.count("an")) # 2Verificare le Proprietà delle Stringhe
Python ha una famiglia di metodi is* che restituiscono True o False riguardo al contenuto di una stringa.
print("hello".isalpha()) # True – all alphabetic
print("hello123".isalnum()) # True – all alphanumeric
print("12345".isdigit()) # True – all digits
print(" ".isspace()) # True – all whitespace
print("Hello World".istitle()) # True – title-caseQuesti sono particolarmente utili per la validazione dell'input.
Esempio Pratico: Pulire l'Input dell'Utente
La modifica delle stringhe nel mondo reale combina spesso diverse tecniche:
raw_input = " Ada Lovelace "
# Clean and normalise
name = raw_input.strip() # remove surrounding spaces
name = name.title() # ensure proper capitalisation
parts = name.split() # split into first / last
first, last = parts[0], parts[1]
print(f"First: {first}, Last: {last}") # First: Ada, Last: LovelaceRiferimento Rapido
| Operazione | Sintassi | Restituisce |
|---|---|---|
| Concatenazione | a + b | Nuova stringa |
| Ripetizione | s * n | Nuova stringa |
| Maiuscolo | s.upper() | Nuova stringa |
| Minuscolo | s.lower() | Nuova stringa |
| Title case | s.title() | Nuova stringa |
| Slice | s[start:stop:step] | Nuova stringa |
| Sostituzione | s.replace(old, new) | Nuova stringa |
| Rimozione spazi | s.strip() | Nuova stringa |
| Suddivisione | s.split(sep) | Lista |
| Unione | sep.join(iterable) | Nuova stringa |
| Ricerca | s.find(sub) | Indice intero o -1 |
| Conteggio | s.count(sub) | Intero |
| Inizia con | s.startswith(prefix) | Boolean |
| Finisce con | s.endswith(suffix) | Boolean |
Per l'elenco completo dei metodi stringa integrati, consulta Metodi delle Stringhe. Per conoscere le sequenze di escape come \n e \t, consulta Caratteri di Escape. Per la ricerca e la manipolazione avanzata del testo tramite pattern, consulta Python Regex.