Eliminare stringhe lunghe da file

Esercizio apparentemente semplice. Vogliamo leggere un file in cui sono presenti un certo numero di righe, ognuna delle quali con una sequenza di caratteri più o meno lunga. Il software deve leggere il file ed eliminare le righe più lunghe di 20 caratteri.

Approccio

Esistono più modi di affrontare il problema, vista anche la genericità della specifica. Non sappiamo infatti molto sul contenuto del testo se le righe sono con parole di senso compiuto, punteggiatura e spazi vuoti. Diamo per assodato che le stringhe siano di lettere consecutive che possiamo leggere quindi in una sola istruzione e inserirle su una una struttura dati a lista.

Una volta importata la lista, possiamo agire su di questa per trovare la stringa con il numero di caratteri non desiderato oppure fare il contrario: cerchiamo tutte le stringhe che non sono da eliminare e le inseriamo in una lista “buona”. Questa soluzione forse è più semplice da perseguire poiché potrebbe essere critico scorrere ed eliminare elementi di una lista senza incorrere in qualche problema.

Nel codice abbiamo lasciato commentati alcuni test che possiamo stampare per controllare l’andamento corretto del codice e dell’algoritmo pensato.

Altro dettaglio leggere un file tutto di un fiato con l’istruzione read() è semplice. Col comando split() si rileva il carattere vuoto di termine riga e quindi si dividono le diverse righe. Mentre per scrivere occorre aggiungere un \n che va a capo poiché il comando writelines prende una lista e la copia sul file senza spazi o andate a capo esplicite.

Per una lettura e scrittura del file o meglio una riscrittura intera, abbiamo preferito separare le operazioni di read e write per comodità logica.

'''
Leggi le righe di un file di cui inseriamo il file da console
 ed elimina quelle più lunghe di 20 caratteri
es.   aaaaaaa
      bbbbbbbbbbbbbbbb
      cccc
diventa:
      aaaaaaa
      cccc
'''

def rimuovi_lista(lista):
    lista_nuova = []
    for i in range(0, len(lista)):
        #print(lista[i], " ", len(lista[i]))
        if (len(lista[i]) < 20):
            lista_nuova.append(lista[i] + "\n")
    return lista_nuova


if __name__ == "__main__":
    nome = input("Inserisci il nome del file da aprire: ")
    file = open(nome, "r")
    lista = file.read().split()
    file.close()

    file = open(nome, "w")
    lista_modificata = rimuovi_lista(lista)
    #print(lista_modificata)
    file.writelines(lista_modificata)
    file.close()

Ultima modifica 3 Marzo 2024