Topic: Trovare ed eliminare tutte righe contenente una determinata parola da file .txt  (Letto 21 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Steveworld7

  • python unicellularis
  • *
  • Post: 1
  • Punti reputazione: 0
    • Mostra profilo
(Se mi trovo nella sezione sbagliata, vi prego di comunicarmelo)
Salve a tutti.
Scrivo nella sezione "Esercizi" perchè potrebbe essere utile ad altri come esercizio.
Io però vi chiedo aiuto.
Ho un file.txt con un elenco di url da cui vorrei eliminare tutti gli url (righe) che contengono la parola .rev.
Esempio:
italia.rar
italia.rev
italia2.rar
italia2.rev
e cosi per molte altre righe.... come dire al programma di SELEZIONARE, ELIMINARE e creare un NUOVO file senza le righe contenti la parola .rev?
Grazie in anticipo

Offline nuzzopippo

  • python habilis
  • **
  • Post: 90
  • Punti reputazione: 0
    • Mostra profilo
Ciao @Steve

Di per se, i passi necessari al Tuo quesito sono semplici, provo a mostrarteli passo passo :

supponiamo definiti i nostri file di input e di output
Python 3.6.9 (default, Nov  7 2019, 10:44:02) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> f_input = 'file.txt'
>>> f_output = 'file_2.txt'

In cui il file di input contiene esattamente il testo da Te esemplificato. potrai leggerne il contenuto ed assegnarne le singole righe ad una lista di stringhe in questo modo:
>>> fi = open(f_input, 'r')
>>> righe = fi.read().splitlines()
>>> righe
['italia.rar', 'italia.rev', 'italia2.rar', 'italia2.rev']
>>> fi.close()

Per i metodi utilizzati, vedi la docs.
Tieni presente che è bene chiudere i file non appena concluse le operazioni di input/output necessarie e che un approccio più corretto prevederebbe l'intercettazione di eventuali errori, ma per ora è prematuro parlarne.

Una volta ottenuta la lista delle righe contenute nel file di input, esistono molti modi per vedere se una determinata stringa è contenuta in un'altra, si va dal metodo "find()" (leggi la docs) delle stringhe alle espressioni regolari, dipende "dalle circostanze".
Un modo molto semplice applicabile al Tuo esempio è vedere direttamente sel la parte da cercare ".rev" è contenuta in una determinata riga, esempio :
>>> for riga in righe:
if '.rev' in riga:
print(riga)



italia.rev
italia2.rev


Puoi, quindi, aprire il file di destinazione e scriverci le righe che NON contengono tale stringa in questo modo :
>>> fo = open(f_output, 'w')
>>> for riga in righe:
if not '.rev' in riga:
fo.write(riga + '\n')


11
12
>>> fo.close()

Trova e leggi la docs relativa.
Il file conterrà :
NzP:~$ cat file_2.txt
italia.rar
italia2.rar
NzP:~$


Spero Ti sia sufficiente, ciao :)