Script de Python para eliminar líneas de texto vacias o que no tengan 7 veces el carácter "|" en ficheros *.log
El macro de YASARA Structure para hacer docking, genera líneas de texto adicionales a los resultados que son molestas cuando importas todos esos datos en un fichero Excel. El siguiente script de Python elimina toda esa información y las líneas en blanco y deja sólo los resultados de docking:
Lig.|Effi[kcal/(mol*Atom)]|Bind.energy[kcal/mol]|Dissoc. constant [pM]| Con.Surf[A^2] |Name | Contacting receptor residues | SMILES
# -*- coding: utf-8 -*-# Este script limpia (elimina de los ficheros *.log generados por YASARA docking) todas las# líneas de texto vacias o que no tengan 7 veces el carácter "|", que es el sepador de los# resultados de docking Lig.|Effi[kcal/(mol*Atom)]|Bind.energy[kcal/mol]|Dissoc. constant [pM]|# Con.Surf[A^2] | Name | Contacting receptor residues | SMILESimport osimport re# Ruta donde se encuentran los archivos# ruta = "/home/jant.encinar/" para trabajar en Linuxruta = r"D:\aaa"# Patrón para buscar los archivos con extensión .logpatron_archivo = re.compile(r'.*\.log$')# Cadenas de inicio y fincadena_inicio = "----+---------------------+---------------------+---------------------+---------------+------+------------------------------+-------------------------"cadena_fin = "The random seed used during docking was 0."# Función para procesar los archivosdef procesar_archivo(ruta_archivo): with open(ruta_archivo, 'r', encoding='utf-8') as f: lineas = f.readlines() # Variables para controlar la sección de interés en_seccion_interes = False lineas_procesadas = [] for linea in lineas: # Comenzar a procesar cuando se encuentre la cadena de inicio if cadena_inicio in linea: en_seccion_interes = True lineas_procesadas.append(linea) continue # Dejar de procesar cuando se encuentre la cadena de fin if cadena_fin in linea: en_seccion_interes = False lineas_procesadas.append(linea) continue # Si estamos en la sección de interés, procesar las líneas if en_seccion_interes: # Eliminar líneas vacías if linea.strip() == '': continue # Eliminar líneas que no contengan el carácter "|" repetido 7 veces if linea.count('|') < 7: continue # Añadir la línea procesada a la lista de líneas procesadas lineas_procesadas.append(linea) # Escribir el contenido procesado de nuevo en el archivo with open(ruta_archivo, 'w', encoding='utf-8') as f: f.writelines(lineas_procesadas)# Recorrer los archivos en la ruta especificadafor root, dirs, files in os.walk(ruta): for file in files: if patron_archivo.match(file): ruta_archivo = os.path.join(root, file) procesar_archivo(ruta_archivo)print("Proceso completado.")
Última actualización: 19/05/2025, 11:19:31