Python: borrando cadenas específicas del archivo

Tengo un archivo de datos (archivo desordenado no estructurado) del cual tengo que limpiar una lista específica de cadenas (eliminar cadenas).

Esto es lo que estoy haciendo pero sin resultado:

infile = r"messy_data_file.txt" outfile = r"cleaned_file.txt" delete_list = ["firstname1 lastname1","firstname2 lastname2"....,"firstnamen lastnamen"] fin=open(infile,"") fout = open(outfile,"w+") for line in fin: for word in delete_list: line = line.replace(word, "") fout.write(line) fin.close() fout.close() 

Cuando ejecuto el archivo, me sale el siguiente error:

 NameError: name 'word' is not defined 

¡Por favor ayuda!

    El método readlines devuelve una lista de líneas , no palabras, por lo que su código solo funcionará cuando una de sus palabras esté en una línea por sí sola.

    Como los archivos son iteradores sobre líneas, esto se puede hacer mucho más fácil:

     infile = "messy_data_file.txt" outfile = "cleaned_file.txt" delete_list = ["word_1", "word_2", "word_n"] fin = open(infile) fout = open(outfile, "w+") for line in fin: for word in delete_list: line = line.replace(word, "") fout.write(line) fin.close() fout.close() 

    Basado en su comentario “Estoy haciendo doble clic en el archivo .py. Parece que invoca la aplicación python que desaparece después de un par de segundos. No me aparece ningún error” Creo que su problema es que el script no encuentra el archivo de entrada. Esa es también la razón por la que no está obteniendo ningún resultado. Cuando haces doble clic en él … En realidad no puedo recordar dónde se verá el intérprete, pero creo que es donde está instalado el python.exe.

    Utilice un camino totalmente calificado como tal.

     # Depends on your OS infile = r"C:\tmp\messy_data_file.txt" outfile = r"C:\tmp\cleaned_file.txt" infile = r"/etc/tmp/messy_data_file.txt" outfile = r"/etc/tmp/cleaned_file.txt" 

    Además, para su cordura, ejecútelo desde la línea de comandos en lugar de hacer doble clic. Será mucho más fácil detectar errores / resultados.

    Para eliminar la cadena dentro del mismo archivo, usé este código

     f = open('./test.txt','r') a = ['word1','word2','word3'] lst = [] for line in f: for word in a: if word in line: line = line.replace(word,'') lst.append(line) f.close() f = open('./test.txt','w') for line in lst: f.write(line) f.close() 

    Para el OP, el método de Ross Patterson anterior funciona perfectamente para mí, es decir,

     infile = "messy_data_file.txt" outfile = "cleaned_file.txt" delete_list = ["word_1", "word_2", "word_n"] fin = open(infile) fout = open(outfile, "w+") for line in fin: for word in delete_list: line = line.replace(word, "") fout.write(line) fin.close() fout.close() 

    Ejemplo:

    Tengo un archivo llamado messy_data_file.txt que incluye las siguientes palabras (animales), no necesariamente en la misma línea. Me gusta esto:

     Goat Elephant Horse Donkey Giraffe Lizard Bird Fish 

    Cuando modifico el código para leer (en realidad solo agrego las palabras para eliminar a la línea “delete_list”):

     infile = "messy_data_file.txt" outfile = "cleaned_file.txt" delete_list = ["Donkey", "Goat", "Fish"] fin = open(infile) fout = open(outfile, "w+") for line in fin: for word in delete_list: line = line.replace(word, "") fout.write(line) fin.close() fout.close() 

    El resultado “clean_file.txt” se ve así:

     Elephant Horse Giraffe Lizard Bird 

    Hay una línea en blanco donde solía estar “Goat” (donde, extrañamente, eliminar “Donkey” no lo estaba), pero para mis propósitos, esto funciona bien.

    También agrego entrada (“Presione Enter para salir …”) el final del código para evitar que la ventana de la línea de comandos se abra y se cierre de golpe cuando hago doble clic en el archivo remove_text.py para ejecutarlo , pero toma nota de que no captarás errores de esta manera.

    Para hacerlo, lo ejecuto desde la línea de comandos (donde C: \ Just_Testing es el directorio donde están todos mis archivos, es decir, remove_text.py y messy_text.txt) como esto:

     C:\Just_Testing\>py remove_text.py 

    o

     C:\Just_Testing>python remove_text.py 

    Funciona exactamente igual.

    Por supuesto, al escribir HTML, creo que nunca está de más usar una ruta completamente calificada cuando se ejecuta py o python desde otro lugar que no sea el directorio en el que se encuentra, como:

     C:\Windows\System32\>python C:\Users\Me\Desktop\remove_text.py 

    Por supuesto en el código sería:

     infile = "C:\Users\Me\Desktop\messy_data_file.txt" outfile = "C:\Users\Me\Desktop\cleaned_file.txt" 

    Tenga cuidado de usar la misma ruta de acceso completa para colocar su clean_file.txt recién creado o se creará donde sea que esté y eso podría causar confusión al buscarlo.

    Personalmente, tengo el PATH en mi Variables de entorno configurado para apuntar a todas mis instalaciones de Python, es decir, C: \ Python3.5.3, C: \ Python2.7.13, etc., así que puedo ejecutar py o python desde cualquier lugar.

    De todos modos, espero que los ajustes de ajuste a este código del Sr. Patterson puedan conseguirle exactamente lo que necesita. 🙂

    .