Come sostituire un carattere in una stringa usando Python

Foto dell'autore

By kair

Questo tutorial esplora diverse metodologie per modificare caratteri all’interno di stringhe in Python, spaziando dall’uso di funzioni predefinite, alle espressioni regolari, e oltre.

In Python, le stringhe sono classificate come strutture dati intrinseche, atte a conservare sequenze di caratteri Unicode. Diversamente da altre strutture dati come liste e dizionari, le stringhe sono immutabili, il che impedisce la modifica diretta di una stringa esistente.

Tuttavia, spesso si presenta la necessità di manipolare le stringhe, ad esempio per eliminare spazi superflui, convertire il testo in maiuscolo o minuscolo, o sostituire specifici caratteri.

Quindi, come possiamo intervenire sulle stringhe in Python? Come si sostituisce un singolo carattere? Questo tutorial si propone di rispondere a tali quesiti, focalizzandosi su:

  • L’immutabilità delle stringhe in Python
  • Le funzioni integrate di Python per la manipolazione di stringhe
  • Metodi diversi per la sostituzione di caratteri in una stringa

Iniziamo l’analisi…

Immutabilità delle Stringhe Python

Come già evidenziato, le stringhe Python sono immutabili, il che significa che non è possibile apportare modifiche direttamente su una stringa esistente. La stringa originale resta inalterata.

Consideriamo, ad esempio, la stringa “Programmazione Python!”.

È possibile accedere a singoli elementi della stringa tramite l’indice, o a porzioni di essa indicando l’inizio e la fine, come si vede di seguito:

>>> my_str = "Python programming!"
>>> my_str[0]
'P'
>>> my_str[4]
'o'
>>> my_str[1:9]
'ython pr'
>>> my_str[9]
'o'

Ipotizziamo di voler rimpiazzare la lettera “o” con il numero “0”.

Sappiamo che “o” si trova nelle posizioni 4 e 9 (come mostrato nel frammento di codice precedente). Tentare di modificare direttamente il carattere in queste posizioni genererebbe un errore:

>>> my_str[4] = '0'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

Python mette a disposizione un set di metodi per le stringhe che, applicati a una stringa, generano una nuova stringa con le modifiche desiderate.

Consulta anche: Programmi Python sulle operazioni con le stringhe.

Per manipolare le stringhe, è possibile combinare i metodi, le list comprehension, i cicli e le espressioni regolari. Questo tutorial si concentrerà sui vari metodi per sostituire un carattere all’interno di una stringa Python.

Sostituzione di un Carattere nelle Stringhe Python

Ci sono numerosi scenari in cui potrebbe essere necessario sostituire caratteri o sequenze di caratteri in una stringa Python. Ecco alcuni esempi:

  • Pulizia del testo: Nella gestione dei dati testuali, potrebbe essere necessario pulire il testo, sostituendo caratteri specifici come spazi superflui, simboli non desiderati o caratteri speciali.
  • Formattazione: Potrebbe essere necessario modificare la formattazione del testo, come convertire in maiuscolo o minuscolo, ad esempio per garantire una capitalizzazione uniforme in titoli o intestazioni.
  • Mascheramento di dati: Per proteggere informazioni sensibili, è spesso necessario mascherare dati come numeri identificativi o di carte di credito, preservandone il formato.
  • Gestione di URL e percorsi: Nella gestione di URL o percorsi di file, è necessario sostituire alcuni caratteri per garantire la corretta formattazione e la compatibilità con browser web o file system.

Prendiamo come esempio la sostituzione di un singolo carattere in una stringa.

Inizieremo con un approccio basato su cicli e istruzioni condizionali, per poi analizzare metodi più efficienti per raggiungere lo stesso risultato.

Riprendiamo l’esempio sostituendo ‘o’ con ‘0’ nella stringa “Programmazione Python!”.

Ecco come iterare la stringa con un ciclo for e sostituire il carattere specificato:

original_string = "Python programming!"
new_string = ""
for char in original_string:
    if char == "o":
        new_string += "0"
    else:
        new_string += char
print(new_string) 

Questo codice itera ogni carattere della stringa `original_string`. Se il carattere è `o`, aggiunge `0` alla stringa `new_string`; altrimenti, aggiunge il carattere originale. Questo processo genera la stringa `new_string` con le sostituzioni desiderate.

# Output
Pyth0n pr0gramming!

L’utilizzo di cicli for e istruzioni if rende il codice più complesso, specialmente quando si devono sostituire sottostringhe o più caratteri.

Nelle prossime sezioni analizzeremo metodi più efficienti per sostituire caratteri o sottostringhe.

#1. Utilizzo di str.replace()

Il metodo `replace()` delle stringhe consente di sostituire una sequenza di caratteri (o un singolo carattere) con un’altra. La sintassi `str.replace(old, new)` sostituisce tutte le occorrenze della sottostringa o del carattere `old` con `new`.

Qui usiamo `replace()` per rimpiazzare la lettera ‘o’ con la cifra ‘0’ in `original_string`.

original_string = "Python programming!"
new_string = original_string.replace("o", "0")
print(new_string) 

La stringa modificata viene memorizzata in `new_string`.

# Output
Pyth0n pr0gramming!

#2. Utilizzo della List Comprehension e del Metodo join()

Un altro metodo per sostituire un carattere in una stringa Python è la list comprehension combinata con il metodo `join()`.

Ecco come possiamo riscrivere l’esempio:

  • Usiamo la list comprehension per iterare i caratteri in `original_string`. Se il carattere è “o”, lo sostituiamo con “0”; altrimenti lo manteniamo invariato.
  • Poi utilizziamo `str.join()` per ricomporre i caratteri in una singola stringa, che sarà `new_string`. Questo è un approccio più conciso rispetto al ciclo e all’istruzione condizionale quando dobbiamo sostituire un solo carattere.
original_string = "Python programming!"
new_string = ''.join(['0' if char == 'o' else char for char in original_string])
print(new_string) 

L’output sarà il seguente:

# Output
Pyth0n pr0gramming!

#3. Utilizzo delle Espressioni Regolari

Le espressioni regolari (regex) rappresentano un’alternativa per sostituire caratteri all’interno di stringhe Python. Python offre il modulo integrato `re` per operazioni di matching tramite espressioni regolari. Con le regex è possibile specificare un modello di ricerca, la stringa su cui operare e la stringa con cui sostituire il modello trovato.

Usiamo la funzione `sub()` del modulo `re` con la sintassi `re.sub(pattern, replace, string)`.

import re

original_string = "Python programming!"
new_string = re.sub(r'o', '0', original_string)
print(new_string) 

Il modello `r’o’` corrisponde a ogni occorrenza della lettera ‘o’ in `original_string`, sostituendola con ‘0’.

# Output
Pyth0n pr0gramming!

Le espressioni regolari consentono di operare su modelli più complessi. Consideriamo ad esempio il mascheramento di numeri di carte di credito, sostituendo tutte le cifre (eccetto le ultime quattro) con ‘X’. Ecco come procedere:

import re

def mask_credit_card(card_number):
    # Utilizziamo espressioni regolari per individuare e rimpiazzare caratteri
    masked_number = re.sub(r'\d(?=\d{4})', 'X', card_number)
    return masked_number

# Esempio d'uso:
credit_card_number = "1234567898765432"
masked_number = mask_credit_card(credit_card_number)
print(masked_number)

Ecco l’output:

# Output
XXXXXXXXXXXX5432

Per semplificare l’espressione, non abbiamo inserito il trattino; tuttavia, si può modificare l’esempio secondo necessità.

#4. Utilizzo di str.maketrans() e str.translate()

In Python, i metodi `str.maketrans()` e `str.translate()` sono utilizzati per tradurre e sostituire caratteri nelle stringhe.

Come funziona str.maketrans()

Il metodo `maketrans()` genera una tabella di traduzione che specifica come i caratteri in una stringa devono essere sostituiti. La sintassi è `str.maketrans(x, y)`, dove:

  • `x` è la stringa che contiene i caratteri da sostituire.
  • `y` è la stringa che contiene i caratteri che sostituiscono quelli in `x`.

Il metodo `maketrans()` crea una tabella basata sulle mappature da `x` a `y`. Questa tabella di traduzione può poi essere usata con il metodo `str.translate()` per eseguire la sostituzione.

Come funziona str.translate()

Il metodo `str.translate()` applica la tabella creata da `str.maketrans()` a una stringa. Esegue la sostituzione carattere per carattere in base alle mappature, restituendo una nuova stringa con le sostituzioni applicate.

Ecco come si usa `translate()`:

new_string = original_string.translate(translation_table)
  • `stringa_originale`: la stringa di input da modificare.
  • `translation_table`: la tabella di traduzione creata con `str.maketrans()` che definisce le mappature dei caratteri.

Combinando `maketrans()` e `str.translate()`, possiamo riscrivere l’esempio:

original_string = "Python programming!"
translation_table = str.maketrans('o', '0')
new_string = original_string.translate(translation_table)
print(new_string)

Creiamo una tabella di traduzione con `str.maketrans(‘o’, ‘0’)` per specificare che ‘o’ deve essere sostituito con ‘0’. Poi utilizziamo `translate()` su `original_string`, ottenendo la stringa modificata `new_string`.

# Output
Pyth0n pr0gramming!

Questi metodi sono utili per attività come la sostituzione di caratteri e altre manipolazioni a livello di carattere.

Conclusione

Rivediamo i concetti appresi.

Le stringhe Python sono immutabili. Quindi, non si può riassegnare direttamente un carattere in una stringa. Abbiamo visto i seguenti approcci per sostituire uno o più caratteri:

  • Utilizzare `str.replace(old, new)` per sostituire tutte le occorrenze di una sottostringa.
  • Usare la list comprehension insieme al metodo `join()`. La list comprehension effettua la sostituzione dei caratteri e il metodo `join()` unisce la lista di caratteri in una stringa.
  • Usare il matching di modelli con espressioni regolari per sostituire occorrenze di un carattere o un pattern, con `re.sub(modello, sostituzione, stringa)`.
  • Utilizzare `str.maketrans()` per creare una tabella di traduzione e il metodo `translate()` per applicarla alla stringa.

È utile sperimentare con esempi di codice per comprendere meglio queste tecniche. Successivamente, esplora come eliminare l’ultimo carattere da una stringa Python.